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

时间:2017-04-25 19:00:26

标签: javascript jquery typescript summernote

Summernote是一个jQuery插件,我不需要它的类型定义。我只想修改对象,但TS不断抛出错误。下面的线仍然给我:" Property' summernote'类型' 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"
  ]
}

4 个答案:

答案 0 :(得分:37)

您可以使用/* 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");
}

请注意the official docs "recommend you use [this] very sparingly"。为了更好地表达意图,它几乎总是总是转换为any

答案 1 :(得分:24)

Sub sGetData2() On Error GoTo E_Handle Dim strFile As String Dim intFile As Integer Dim strInput As String Dim astrData() As String Dim lngLoop1 As Long Dim lngCount As Long Dim lngRow As Long strFile = "J:\downloads\sample1.txt" intFile = FreeFile Open strFile For Input As intFile strInput = input(LOF(intFile), intFile) astrData() = Split(strInput, vbLf) lngCount = UBound(astrData) lngRow = 1 For lngLoop1 = 3 To lngCount If InStr(astrData(lngLoop1), "@m_start") > 0 Then lngRow = lngRow + 1 ActiveSheet.Cells(lngRow, 1) = Mid(astrData(lngLoop1), 12) ElseIf InStr(astrData(lngLoop1), "@m_end") > 0 Then ActiveSheet.Cells(lngRow, 2) = Mid(astrData(lngLoop1), 12) ElseIf InStr(astrData(lngLoop1), "&i_name 01") > 0 Then lngLoop1 = lngLoop1 + 2 ActiveSheet.Cells(lngRow, 3) = Mid(astrData(lngLoop1), 41, 4) ElseIf InStr(astrData(lngLoop1), "~CMS_substrate_id") > 0 Then ActiveSheet.Cells(lngRow, 4) = Mid(astrData(lngLoop1), 24) End If Next lngLoop1 sExit: On Error Resume Next Reset Exit Sub E_Handle: MsgBox Err.Description & vbCrLf & vbCrLf & "sGetData2", vbOKOnly + vbCritical, "Error: " & Err.Number Resume sExit End Sub

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

  • 具有与@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可用于所有各种编译器错误。对于类型问题(例如在OP中),由于错误抑制范围较窄,我建议使用以下替代方法之一:

▶使用any类型

@ts-expect-error

Augment // 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

在其他情况下,对于没有/可扩展类型的模块,shorthand module declarationsmodule augmentations是方便的实用程序。可行的策略也是keep not migrated code in .js--allowJscheckJs: false一起使用。

答案 2 :(得分:6)

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

答案 3 :(得分:0)

this answer类似,您可以覆盖JQueryStatic类型定义以包含summernote属性。

interface JQueryStatic {
  // Opt out of type-checking summernote using the any type
  // See https://www.typescriptlang.org/docs/handbook/basic-types.html#any
  summernote: any
}

(function ($) {

  delete $.summernote.options.keyMap.pc.TAB;
  delete $.summernote.options.keyMap.mac.TAB;

})(jQuery)