typescript - 为什么在使用隐式 Any 时 Typescript 不显示错误?

标签 typescript type-inference tsconfig

在我的 tsconfig.json 中,我设置了 "noImplicitAny": true。但是以下代码不会产生错误:

let x;
x = 5;
x = "a";
x = null;
console.log(x);

这里的x不是隐式设置为any(与显式设置相反,我会在其中编写let x: Any;)?

我知道,由于赋值不同,编译器可以在编译时推断 Any ,但我认为选项 "noImplicitAny": true 用于防止这种推断。

在这种情况下是否有其他编译器选项显示错误?

最佳答案

Typescript 可能会根据上下文推断变量是其实际类型的子类型:

let a: number | number[] = 0;
if (!Array.isArray(a)) a = [a];
void a;
//   ^?
// let a: number[] | (number & any[])

a = 123;
void a;
//   ^?
// let a: number

if (a === 999) {
    void a;
    //   ^?
    // let a: 999
}

function f() {
    // doesn't work in functions:
    void a;
    //   ^?
    // let a: number | number[]
}

如果您将变量类型定义为未知,子类型将停止用于赋值。
如果将变量类型定义为 any 子类型将停止在任何地方工作。
如果您不编写类型,它将从您分配的值中获取。

但是,如果您根本不定义变量类型,它将是可子类型的 any

关于typescript - 为什么在使用隐式 Any 时 Typescript 不显示错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76637367/

相关文章:

javascript - Typescript - 将命名空间导入另一个命名空间

javascript - Angular 2 - TypeError undefined 不是数组包含的函数

node.js - Typescript 函数返回两个不同的对象

angular - 架构验证失败,出现以下错误 : Data path "" should have required property 'tsConfig'

javascript - TypeScript 将静态助手添加到现有类的原型(prototype)

android - ui-router 保持 Controller Activity

javascript - 在 Angular 应用程序上将 XML RSS feed 转换为 Json

c++ - "Materializing"用于 C++ 类型推断的已知类型的对象

reactjs - 使用 React 和 Typescript 描述柯里化(Currying)状态处理程序的类型

Haskell:a -> a 类型函数的示例,除了标识