let a;
a = 5;
a = "hi";为什么这是有效的TypeScript代码?除了«a:number»之外,还有其他更严格的设置吗?如果没有,那么如果你可以使用JavaScript + vscode //@ts- 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
},发布于 2018-05-25 00:05:52
它之所以有效,是因为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持有什么类型。
发布于 2018-05-25 00:01:47
为什么这是有效的TypeScript代码?
允许向后兼容javascript。这是完全有效的js,所以它也需要是有效的typescript。但是你可以很容易的选择类型检查:
let a: number;发布于 2018-05-25 00:13:32
为什么这是有效的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确保,当变量正在使用时,您可以使用类型并验证它们。作为参数)。
https://stackoverflow.com/questions/50513575
复制相似问题