如何阻止从“any”隐式转换为更强的类型

twi*_*kes 6 casting any typescript tslint

TypeScript 允许隐式转换为any更强的类型。考虑到反序列化的 JSON 类型为any,此行为会导致许多类型错误并破坏类型。

我可以使用哪些编译器或 linting 选项来阻止隐式转换为any更强的类型?

复制此操作应标记为允许转换any为更强的类型。

const o = JSON.parse("");
const s: string = o.twinlakes;
Run Code Online (Sandbox Code Playgroud)

Jos*_*osh 9

如果您还没有这样做,请尝试启用 TypeScript--noImplicitAny编译器标志,以阻止声明意外忘记标记无法推断的事物的类型。这将阻止代码允许function takesData(data) { /* ... */ }data变量“隐式”为 type any

2023 年 1 月编辑:现在正确的答案是使用typescript-eslint

此外,还有一些来自 typescript-eslint 的 ESLint 规则,您可以将其用于anys,甚至可以使用--noImplicitAny

您可以在 ESLint 配置中单独启用这些规则,以便在项目中使用它们。plugin:@typescript-eslint/strict或者,如果您从配置进行扩展,则它们都会启用。

最后,正如 Titian 在评论中提到的那样,请考虑unknown在代码中任何您想要使用的地方使用any. unknown类似于,any但 TypeScript 会强制您在不安全地使用它们之前正确输入窄 unknown值。


下面的答案已经过时,因为TSLint 已被弃用请参阅上面的typescript-eslint答案。

此外,还有一些TSLint规则可以提供帮助:

  • no-any:禁止使用 来any作为类型声明。使用它来阻止声明包含any在其中,例如let data: any = {/*...*/}.
  • no-unsafe-any:禁止any以不安全的方式意外使用。这与no-any您可能仍在any不知情的情况下使用类型不同:例如,let data = JSON.parse("{}");.

  • 并在任何需要使用“any”的地方使用“unknown” (4认同)