为什么打字稿接受数字值作为类型?

use*_*663 7 javascript typescript angular

我的Angular 4项目中有一个错误,我在其中声明了一个变量:

debounce: 300;
Run Code Online (Sandbox Code Playgroud)

代替

debounce = 300;
Run Code Online (Sandbox Code Playgroud)

所以当然this.debounce在修复之前是未定义的.

在这种情况下,打字机不应该给我一个错误吗?

Fen*_*ton 17

如果声明具有类型注释的变量300,则表示不仅类型为数字,而且只有值300可接受:

var debounce: 300;
Run Code Online (Sandbox Code Playgroud)

如果您尝试分配200,则会出现错误:

debounce = 200;
Run Code Online (Sandbox Code Playgroud)

启用严格的空检查,编译器将捕获此类问题(您要分配值,而不是类型注释):

var debounce: 200;

// Strict null checks tells you here that you have done something strange
var x = debounce;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当您尝试使用该变量时,严格的空检查指出您从未分配过一个值 - 从而告诉您您进行了注释,而不是赋值.


Osm*_*Cea 9

您基本上可以将(几乎)任何值作为值类型传递给Typescript.所以,如果你说:

class SomeClass {
  debounce: 300 | 500 | 700; 
  constructor() {
    this.debounce = 400;
  }
}
Run Code Online (Sandbox Code Playgroud)

你会得到一个类型错误,因为打字稿期望去抖动的值是300,500或者700不是任何数字.这意味着您可以更具体地了解类型注释.