interface Initializing {
progress: number;
}
var isInitializing = (x: any): x is Initializing => {
return typeof x.progress === 'number';
}
上面的代码可以编译而没有任何错误。
我的问题与代码中的“:x is Initializing”子句有关。它似乎不会影响生成的JavaScript。
“x is Initializing”子句用于什么?进行了什么样的类型检查?当我用任何参数调用函数'isInitializing'时,它似乎生成相同的代码。它生成相同的JS代码。
非常感谢例子。
答案 0 :(得分:1)
它是user defined type guard。它不会生成任何代码,但是当函数与if语句一起使用时,编译器会自动将传入的对象视为if语句中is
子句中指定的类型。
以下是一个例子:
interface Initializing {
progress: number;
}
var isInitializing = (x: any): x is Initializing => {
return typeof x.progress === 'number';
}
var obj = { progress: 1 };
// obj is type "{ progress: number; }" here
if (isInitializing(obj)) {
obj; // obj is type "Initializing" within this if statement
}
// obj is type "{ progress: number; }" here