跳至主要内容

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 抑制,从而被忽略。

.eslintrc.cjs
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 中打开

选项

此规则不可配置。

何时不使用它

如果您正在针对多个版本的 TypeScript 编译并使用 @ts-ignore 来忽略特定于版本的类型错误,则此规则可能会妨碍您。您可能考虑使用 ESLint 禁用注释 针对这些特定情况,而不是完全禁用此规则。

进一步阅读

资源