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)
如果您还没有这样做,请尝试启用 TypeScript--noImplicitAny编译器标志,以阻止声明意外忘记标记无法推断的事物的类型。这将阻止代码允许function takesData(data) { /* ... */ }其data变量“隐式”为 type any。
2023 年 1 月编辑:现在正确的答案是使用typescript-eslint:
此外,还有一些来自 typescript-eslint 的 ESLint 规则,您可以将其用于anys,甚至可以使用--noImplicitAny:
@typescript-eslint/no-unsafe-argument:不允许调用具有类型为any 的值的函数。@typescript-eslint/no-unsafe-assignment:不允许将具有类型的值分配any给变量和属性。@typescript-eslint/no-unsafe-call:不允许调用类型为 的值any。@typescript-eslint/no-unsafe-member-access:禁止成员访问类型为 的值any。@typescript-eslint/no-unsafe-returnany:禁止从函数返回具有类型的值。您可以在 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("{}");.| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |