2016-01-20 52 views
0
interface Initializing { 
    progress: number; 
} 

var isInitializing = (x: any): x is Initializing => { 
    return typeof x.progress === 'number'; 
} 

上面的代码可以编译没有任何错误。typescript守卫在方法声明

我的问题与代码中的“:x is Initializing”子句有关。它似乎不会影响生成的JavaScript。

什么“:x正在初始化”子句用于?什么样的类型检查完成?当我使用任何参数调用函数“isInitializing”时,它似乎生成相同的代码。它产生相同的JS代码。

示例非常感谢。

回答

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