如何使用@ts-ignore 忽略打字稿错误?

saz*_*saz 35 typescript eslint

我有一个案例,我在 TypeScript 项目中导入了一个纯 JavaScript 库,这给了我唠叨的Could not find a declaration file for module xxx消息。所以在阅读后我发现我可以用@ts-ignore. 然而在违规行之前添加该评论,我收到另一个错误

不要使用“// @ts-ignore”注释,因为它们会抑制编译错误@typescript-eslint/ban-ts-ignore

如何修复此错误并禁止显示原始消息?

Tho*_*aud 70

你可以停止使用@ts-ignore:troll:

或者您可以禁用 eslint 规则。将其添加到您的 eslint 配置(.eslintrc或等效配置)中

...
  "rules": {
    "@typescript-eslint/ban-ts-ignore": "off"
  }
...
Run Code Online (Sandbox Code Playgroud)

编辑:如果您使用的是@typescript-eslint/eslint-plugin2.18 或更高版本,则会调用该规则ban-ts-comment,您需要添加

"@typescript-eslint/ban-ts-comment": "off"
Run Code Online (Sandbox Code Playgroud)

反而。这是变更日志

  • 还要注意“allow-with-description”选项 (4认同)
  • “这是不好的做法”。那么为什么我们不添加一条规则来禁用禁用此规则,称之为“@typescript-eslint/ban-disabling-typescript-eslint-ban-ts-comment”,这样当我需要使用@ts-ignore时,我必须在它前面加上“// eslint-disable-next-line @typescript-eslint/ban-disabling-typescript-eslint-ban-ts-comment”前缀,这肯定会让我的代码更美观、更容易阅读 (3认同)

Fan*_*Bao 40

我建议允许@ts-ignore强制描述。这可以通过以下配置来实现.eslintrc.js文档链接

rules: {
  '@typescript-eslint/ban-ts-comment': [
    'error',
    {'ts-ignore': 'allow-with-description'},
  ],
},
Run Code Online (Sandbox Code Playgroud)

您现在需要description为忽略添加一个。这是通过在忽略语句后添加冒号:并添加描述来完成的(这也可以具有强制的最小长度minimumDescriptionLength)。

例子:

// @ts-ignore: Testing invalid input
Run Code Online (Sandbox Code Playgroud)

在这种情况下,描述将是Testing invalid input

  • 即使您链接的文档也没有详细说明您此处的语法 - 谢谢! (2认同)

小智 34

由于我缺乏声誉,因此发布作为答案而不是评论已接受的答案。我仍然想做出贡献并可能帮助某人。

我的规则是

@typescript-eslint/ban-ts-comment
Run Code Online (Sandbox Code Playgroud)

不是 ban-ts-ignore


eha*_*hab 24

这里的所有答案都建议禁用整个 eslint 规则,这不是很实用,更好的解决方案是忽略该特定位置的 eslint 错误,如下所示:

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但顺便说一句,我是唯一一个认为这很荒谬的人?多久之后需要在这两条之上再制定一条规则? (29认同)
  • 谢谢,这个解决方案更加灵活,仍然可以拥有全局的eslint规则 (4认同)
  • 这是推荐的方式,而不是接受的答案。 (3认同)
  • 这是比全局申请更推荐的方式 (3认同)
  • @AgustinAmato 不建议这样做,因为它会禁用除仅禁用一个规则之外的所有规则。配置良好的 linter 不应该允许这样做。 (3认同)

hev*_*ev1 8

从 TypeScript 3.9 开始,@ts-expect-error可以使用。

\n
\n

当一行前面有 // @ts-expect-error 注释时,TypeScript 将禁止报告该错误;但如果\xe2\x80\x99s 没有错误,TypeScript 将报告 // @ts-expect-error isn\xe2\x80\x99t 是必要的。

\n
\n

@typescript-eslint/ban-ts-comment只要提供说明解释原因,

\n

例如:

\n
// @ts-expect-error: No declaration file for module\nimport something from \'somemodule\';\n
Run Code Online (Sandbox Code Playgroud)\n
\n

顺便说一句,为了专门解决有关模块缺少声明文件的错误,如果确实没有要从Definely Typed安装的类型定义(例如@types/module_name),那么您可以在任何位置声明该模块.d.ts在项目中的以抑制错误。

\n
declare module \'module_name\';\n
Run Code Online (Sandbox Code Playgroud)\n