方法声明中的打字稿

时间:2016-01-20 04:51:35

标签: typescript

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代码。

非常感谢例子。

1 个答案:

答案 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