HttpRequest
为什么这是有效的TypeScript代码?除了«a:number»之外,还有更严格的设置吗?如果没有,那么使用TypeScipt是什么意思,如果你可以使用JavaScript + vscode // @ ts-check? 我的tsconfig.json:
let a;
a = 5;
a = "hi";
答案 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确保在使用变量时可以使用类型并验证它们(例如,作为参数)。