javascript - typescript 类型检查

标签 javascript typescript types ecmascript-6

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/

相关文章:

angular - 从下拉列表中选择自定义选项后如何启用输入文本框?

javascript - 来自 EventEmitter 的热共享 Observable

haskell - 使用 TypeFamilies 派生实例

javascript - 这个网站是怎么做出来的? div对齐并相互粘连

javascript - 在链接点击时切换相关元素

javascript - TypeScript 模板文字打破了通用约束

haskell - 将两个 Int 值相除以获得 Float 的正确方法是什么?

types - 错误[E0308] : mismatched types expected `()` ,找到了 `bool`。如何清除此错误?

javascript - 如何将 html div 转换为图像,然后另存为 gif 或 png?

javascript - 触发多个按键来刺激键盘快捷键jquery