prefer-ts-expect-error
强制使用
@ts-expect-error
代替@ts-ignore
。
此规则报告的一些问题可以通过 --fix
ESLint 命令行选项 自动修复。
此规则已被 @typescript-eslint/ban-ts-comment
弃用。此规则 (@typescript-eslint/prefer-ts-expect-error
) 将在 typescript-eslint 的未来主要版本中移除。
首次创建时,@typescript-eslint/ban-ts-comment
规则只负责建议移除 @ts-ignore
指令。后来它更新为建议用 @ts-expect-error
指令替换 @ts-ignore
,因此它完全取代了 @typescript-eslint/prefer-ts-expect-error
。
TypeScript 允许您通过在出错行之前放置以 @ts-ignore
或 @ts-expect-error
开头的注释来抑制该行上的所有错误。这两个指令的工作方式相同,除了 @ts-expect-error
在放置在并非出错行的行之前时会导致类型错误。
这意味着 @ts-ignore
很容易被遗忘,即使在它们抑制的错误被修复后仍然保留在代码中。这是危险的,因为如果该行出现新的错误,它将被遗忘的 @ts-ignore
抑制,从而被忽略。
module.exports = {
"rules": {
"@typescript-eslint/prefer-ts-expect-error": "error"
}
};
在游乐场中尝试此规则 ↗
示例
此规则报告任何 @ts-ignore
的使用,包括一个修复程序以替换为 @ts-expect-error
。
- ❌ 错误
- ✅ 正确
// @ts-ignore
const str: string = 1;
/**
* Explaining comment
*
* @ts-ignore */
const multiLine: number = 'value';
/** @ts-ignore */
const block: string = 1;
const isOptionEnabled = (key: string): boolean => {
// @ts-ignore: if key isn't in globalOptions it'll be undefined which is false
return !!globalOptions[key];
};
在 Playground 中打开// @ts-expect-error
const str: string = 1;
/**
* Explaining comment
*
* @ts-expect-error */
const multiLine: number = 'value';
/** @ts-expect-error */
const block: string = 1;
const isOptionEnabled = (key: string): boolean => {
// @ts-expect-error: if key isn't in globalOptions it'll be undefined which is false
return !!globalOptions[key];
};
在 Playground 中打开选项
此规则不可配置。
何时不使用它
如果您正在针对多个版本的 TypeScript 编译并使用 @ts-ignore
来忽略特定于版本的类型错误,则此规则可能会妨碍您。您可能考虑使用 ESLint 禁用注释 针对这些特定情况,而不是完全禁用此规则。