Microsoft/TypeScript

Differing user-defined type guard and 'typeof' type guard behaviour when narrowing 'any'

開放

#6,015 建立於 2015年12月9日

 (11 則留言) (0 個反應) (0 位負責人)TypeScript (13,395 個分叉)batch import
Effort: ModerateHelp WantedSuggestion

倉庫指標

星標
 (108,860 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

In the below code, using a typeof type guard and an equivalent (I thought) user-defined guard, only one error is produced.

var y: any;

// Built-in type guard
if (typeof y === "string") {
    y.hello = true; // Correct error - 'hello' does not exist on type string
}

// Equivalent user-defined type guard
function f(x: any): x is string {
    return typeof x === "string";
}

if (f(y)) {
    y.hello = true; // No error with user-defined guard
}

Playground demo. Looks like user-defined type guards won't narrow from any, in any circumstances, as far as I can tell.

貢獻者指南