如何阻止从“任何”隐式转换为更强的类型
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("{}");
.
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("{}");
.