// @ts-ignore仅忽略紧随其后的单行ts错误,须写在报错行正上方;// @ts-expect-error更安全,要求该行必须存在ts错误,否则编译失败;eslint需用// eslint-disable-next-line等专用指令。

用 // @ts-ignore 忽略 TypeScript 单行类型错误
它只压制紧随其后的那一行,且必须写在报错行正上方、中间不能有空行。比如 tsc 报 Property 'foo' does not exist on type 'Bar',你确认这是临时兼容逻辑,就在该行上加:
// @ts-ignore obj.foo = 'hello';
注意:// @ts-ignore 不验证错误是否存在——哪怕你后来修好了这行,它也继续静默跳过检查,隐患容易被掩盖。
- 不支持带说明的写法,如
// @ts-ignore: unsafe cast在多数 VSCode 稳定版中会被忽略 - 对 JS 文件也生效,但前提是启用了 JS 类型检查(
// @ts-check或"checkJs": true) - 如果一行里有链式调用(如
el.querySelector('x').innerText.trim()),整行都被忽略,无法只绕过其中一环
用 // @ts-expect-error 替代 @ts-ignore 更稳妥
它和 // @ts-ignore 一样只作用于下一行,但多了一层校验:编译时会强制要求该行**必须存在 TS 错误**,否则报 Unused @ts-expect-error comment 并失败。
适合团队项目或长期维护代码,能防止你忘了清理已失效的 ignore 注释。
- 拼写必须严格,
// @ts-expected-error或// @ts expect-error都无效 - 不能用于纯声明语句,例如
let x: number;单独一行不会触发错误,加了也白加 - VSCode 实时检查和
tsc --noEmit都会执行这层校验,不是仅限 CLI
ESLint 行级禁用要用自己的语法
VSCode 里很多红色波浪线其实来自 ESLint,不是 TypeScript。想忽略某一行的 ESLint 规则,// @ts-ignore 完全没用,得用 ESLint 原生指令:
-
// eslint-disable-next-line rule-name:禁用下一行指定规则,如// eslint-disable-next-line no-console -
// eslint-disable-line rule-name:禁用当前行 - 不写规则名(如
// eslint-disable-next-line)会禁用所有规则,不推荐 - 多个规则用逗号分隔:
// eslint-disable-next-line no-console, no-unused-vars
这些注释对 npx eslint CLI 和 CI 流程同样生效,不只是 VSCode 编辑器内提示。
别混淆“编辑器抑制”和“规则禁用”
按 Ctrl + .(Win/Linux)或 Cmd + .(macOS)唤出快速修复菜单,选 Suppress diagnostic,VSCode 会自动插入对应注释——但它本质是调用语言服务器的诊断抑制机制,不是在代码里写规则豁免。
比如在 TS 文件里选“Suppress all diagnostics in this file”,它插的是 // @ts-nocheck;在 ESLint 项目里插的是 /* eslint-disable */。这两者都只影响编辑器内提示,tsc 或 eslint 命令行仍会照常报错。
真正要让某文件彻底跳过 ESLint 检查(包括 CI),得靠 .eslintignore,且必须放在项目根目录,路径写相对路径,改完还得手动重启 ESLint Server。











