let a;
a = 5;
a = "hi";
为什么这是有效的 TypeScript 代码?除了“a:number”之外,还有其他更严格的设置吗?如果不是,那么如果可以使用 JavaScript + vscode//@ts-check,那么使用 TypeScipt 有何意义? 我的 tsconfig.json:
"compilerOptions": {
"baseUrl": ".",
"outDir": "build/dist",
"module": "esnext",
"target": "es6",
"lib": ["es6", "dom"],
"sourceMap": true,
"allowJs": false,
"strict": true,
"jsx": "react",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true
},
最佳答案
它之所以有效,是因为 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
持有什么类型。
关于javascript - typescript 类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50513575/