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

zpf6vheq  于 2023-06-22  发布在  jQuery
关注(0)|答案(6)|浏览(188)

Summernote是一个jQuery插件,我不需要它的类型定义。我只是想修改对象,但TS不断抛出错误。下面这行仍然给我:**“Property 'summernote' does not exist on type 'jQueryStatic'."**错误。

(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"
  ]
}
50pmv0ei

50pmv0ei1#

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

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

请注意,官方文档“建议您非常谨慎地使用[this]”。几乎 * 总是 * 最好转换为any,因为这更好地表达了意图。
老答案:
您可以使用/* tslint:disable-next-line */在本地禁用tslint。但是,由于这是一个编译器错误,禁用tslint可能没有帮助。
你可以将$临时转换为any

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

这样你就可以访问任何你想要的房产

uqxowvwt

uqxowvwt2#

@ts-expect-error

TypeScript 3.9引入了一个新的魔法注解。@ts-expect-error将:

  • 功能与@ts-ignore相同
  • 如果实际上 * 没有 * 编译器错误被抑制,则触发错误(=指示无用标志)
if (false) {
  // @ts-expect-error: Let's ignore a compile 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"); 
}

Playground

TypeScript开发者推荐什么?

@ts-ignore@ts-expect-error就像一把用来对付编译错误的大锤。TypeScript开发人员建议在大多数情况下使用更细粒度、范围更窄的类型系统解决方案:
我们添加了ts-ignore,目的是将其用于剩余的5%,这些5%不能被任何现有的类型系统机制抑制[...]在您的代码库中应该有非常非常少的ts-ignore [.] - microsoft/TypeScript#19139
[...]从根本上说,我们认为你根本不应该在TypeScript中使用抑制。如果是类型问题,可以强制转换(这就是为什么存在any、强制转换和速记模块声明)。如果这是一个语法问题,一切都很糟糕,我们无论如何都会被破坏,所以抑制不会做任何事情(抑制不会影响解析错误)。- microsoft/TypeScript#19573

question-case的替代

▶使用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;

AugmentJQueryStatic接口

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

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

在其他情况下,速记声明/扩充是编译没有/可扩展类型的模块的方便实用程序。一个可行的策略也是incrementally migrate到TypeScript,keeping not yet migrated code in .js通过allowJscheckJs: false编译器标志。

ndasle7k

ndasle7k3#

您可以在该行之前简单地使用以下内容:// @ts-ignore

1bqhqjot

1bqhqjot4#

我在出现错误之前使用了// @ts-ignore:next-line

vcudknz3

vcudknz35#

如果您使用eslint来执行检查或修复,则可以通过在行顶部添加以下命令来禁用行

// eslint-disable-next-line @typescript-eslint/<RELEVANT_ESLINT_RULE>
pod7payv

pod7payv6#

在您的tsconfig.json中添加:

{
  "downlevelIteration": true,
  "strictNullChecks": false,
}

你会没事的

相关问题