noImplicitAny 激活 - 不允许什么?

问题描述 投票:0回答:1

从文档和互联网上,我了解到像下面这样的代码会导致编译错误,因为 TypeScript 尝试推断 's' 的类型,将其视为 'any',但没有声明 's 的类型':

function fs(s){
    console.log(s.substr(3));
}

但是,我很困惑为什么下一个代码片段不会导致错误:

let x;

如果我将鼠标悬停在“x”上,我会看到类型为“any”,但我没有在任何地方声明“x”的类型。此外,我可以执行以下操作:

let x;
x = 5;
x = "22";
x = {a: 1, b: 2};

仍然不会发生错误。 您能否澄清一下“noImplicitAny”在这种情况下的含义?

typescript
1个回答
0
投票

这似乎是 TS 2.1 中有意添加的。了解改进任何推理

早些时候

let x; // implicitly 'any'
let y = []; // implicitly 'any[]'
let z: any; // explicitly 'any'.

以上都会导致错误。但2.1之后,TS可以根据赋值推断类型。

let x;
// You can still assign anything you want to 'x'.
x = () => 42;

控制流分析的改进是PR#11263的一部分。 仅当 TS 无法找到变量的类型且没有任何类型注释时,才应报告隐式错误。

在您的示例中,

x
的类型非常简单。

这样想,上面的代码相当于:

let x = {a: 1, b: 2};

您希望这是一个错误吗?

虽然

x
的类型现在是 any,但只要您访问它,它就会推断出正确的类型。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.