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

How to block implicitly casting from `any` to a stronger type

TypeScript 允许从 any 隐式转换为更强的类型。考虑到反序列化的 JSON 是 any 类型,此行为允许出现许多类型错误并中断输入。

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

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

const o = JSON.parse("");
const s: string = o.twinlakes;

如果您还没有,请尝试启用 TypeScript --noImplicitAny 编译器标志,以防止声明意外忘记标记无法推断的事物类型。这将阻止 let data;function takesData(data) { /* ... */ } 等代码允许它们的 data 变量 "implicitly" 类型为 any.

此外,还有一些 TSLint 规则可以帮助解决这个问题:

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