如何禁用特定行的ts规则?


78

Summernote是一个jQuery插件,我不需要它的类型定义。我只想修改对象,但TS不断抛出错误。下面的行仍然给我:“类型'jQueryStatic'上不存在属性'summernote'。” 错误。

(function ($) {

  /* tslint:disable */
  delete $.summernote.options.keyMap.pc.TAB;
  delete $.summernote.options.keyMap.mac.TAB;
  /* tslint:enable */

})(jQuery)

编辑:

这是我的tsconfig.json

{
  "compilerOptions": {
    "outDir": "./dist/",
    "sourceMap": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es5",
    "allowJs": true,
    "noUnusedParameters": true
  },
  "include": [
      "js/**/*"
  ],
  "exclude": [
      "node_modules",
      "**/*.spec.ts"
  ]
}

Answers:


105

您可以/* tslint:disable-next-line */用来本地禁用tslint。但是,由于这是编译器错误,禁用tslint可能无济于事。

您可以随时将其强制转换$any

delete ($ as any).summernote.options.keyMap.pc.TAB

这将允许您访问所需的任何属性。


编辑:从Typescript 2.6开始,您现在可以绕过针对特定行的编译器错误/警告:

if (false) {
    // @ts-ignore: Unreachable code error
    console.log("hello");
}

请注意,官方文档“建议您非常谨慎地使用[this]”。它几乎总是最好投地any,而不是作为意图,更好地表达。


1
接受的答案不能回答一般性问题。禁用规则
Josef.B

1
关于特定错误,存在一个活跃的问题@ts-ignore
y2bd19年

以及如何禁用jsx中的行?
Atombit

1
@Atombit这是解决该问题的GH问题:github.com/Microsoft/TypeScript/issues/27552
y2bd

22

@ts-expect-error

TS 3.9引入了新的魔术注释。@ts-expect-error将:

  • 具有与...相同的功能 @ts-ignore
  • 如果实际上没有抑制任何编译器错误,则触发错误(=表示无用标志)
if (false) {
  // @ts-expect-error: Let's ignore a single compiler error like this unreachable code 
  console.log("hello"); // compiles
}

// If @ts-expect-error didn't suppress anything at all, we now get a nice warning 
let flag = true;
// ...
if (flag) {
  // @ts-expect-error
  // ^~~~~~~~~~~~~~~^ error: "Unused '@ts-expect-error' directive.(2578)"
  console.log("hello"); 
}

备择方案

@ts-ignore并且@ts-expect-error可用于所有种类的编译器错误的。对于类型问题(例如在OP中),由于错误抑制范围较窄,我建议使用以下替代方法之一:

▶使用any类型

// type assertion for single expression
delete ($ as any).summernote.options.keyMap.pc.TAB;

// new variable assignment for multiple usages
const $$: any = $
delete $$.summernote.options.keyMap.pc.TAB;
delete $$.summernote.options.keyMap.mac.TAB;

增强 JQueryStatic界面

// ./global.d.ts
interface JQueryStatic {
  summernote: any;
}

// ./main.ts
delete $.summernote.options.keyMap.pc.TAB; // works

在其他情况下,没有/可扩展类型的模块的速记模块声明模块扩充是方便的实用程序。可行的策略还在于不要将未迁移的代码保留在其中.js--allowJs与之一起使用checkJs: false

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.