打字稿类型检查

时间:2018-05-24 15:56:17

标签: javascript typescript types ecmascript-6

HttpRequest

为什么这是有效的TypeScript代码?除了«a:number»之外,还有更严格的设置吗?如果没有,那么使用TypeScipt是​​什么意思,如果你可以使用JavaScript + vscode // @ ts-check? 我的tsconfig.json:

let a;
a = 5;
a = "hi";

3 个答案:

答案 0 :(得分:4)

它有效,因为noImplicitAny不会影响变量声明。如果声明了变量,但未声明其类型,则假定为any

这是这样定义的,因为尽管变量为any隐式,编译器实际上可以在每个点确定其类型。

事实上,如果你这样做:

var a;
a = 5;
a.dot(); // error, number does not have a 'dot' property.
a = "hi";
a.foo(); // error, string does not have a 'foo' property.

您收到错误消息,表示string没有属性foo,或number没有属性dot

但是,如果你写:

function(b) {
    return b + 2;
}

但是,此函数表示错误,因为没有任何内容提示编译器有关b类型的内容。

答案 1 :(得分:3)

  

为什么这是有效的TypeScript代码?

允许使用javascript向后兼容。这是完全有效的js,因此它也需要是有效的打字稿。但你可以轻松选择类型检查:

let a: number;

答案 2 :(得分:2)

  

为什么这是有效的TypeScript代码?

noImplicityAny 仅影响“参数”而不影响“变量”。

因此这些代码是正确的:

let a;
a = 'test';
a = 123;

但是当你想声明一个函数参数时,你会得到一个错误:

function log(someArg) { // Error : someArg has an implicit `any` type
    console.log(someArg);
} 

此代码可以使用:

function log(someArg: any | string | number) { // Error : someArg has an implicit `any` type
    console.log(someArg);
} 

TypeScript确保在使用变量时可以使用类型并验证它们(例如,作为参数)。

Here you can find the article.