Fox*_*Pro 0 javascript types typescript ecmascript-6
let a;
a = 5;
a = "hi";
Run Code Online (Sandbox Code Playgroud)
为什么这是有效的 TypeScript 代码?除了 «a:number» 之外,还有其他更严格的设置吗?如果不是,那么使用 TypeScipt 有什么意义,如果您可以使用 JavaScript + vscode //@ts-check?我的 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
},
Run Code Online (Sandbox Code Playgroud)
它有效,因为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.
Run Code Online (Sandbox Code Playgroud)
你得到一个错误,表明string没有 property foo,或者number没有 property dot。
但是,如果你写:
function(b) {
return b + 2;
}
Run Code Online (Sandbox Code Playgroud)
然而,这个函数指示一个错误,因为没有任何东西可以提示编译器关于什么类型b保存。
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |