eslint - Hur man ignorerar TypeScript-fel med @ts-ignore?


Jag har ett fall där jag importerar ett rent JavaScript-bibliotek inom ett TypeScript-projekt och det ger mig felet Could not find a declaration file for module xxx.

Efter att ha läst fann jag att jag kan undertrycka det med en kommentar @ts-ignore. Ändå, när jag lägger till den kommentaren före den felaktiga raden får jag ett annat fel:

Do not use "// @ts-ignore" comments because they suppress compilation errors  @typescript-eslint/ban-ts-ignore

Hur kan jag åtgärda detta fel och undertrycka det ursprungliga meddelandet?

Svar #1

Alla svar här föreslår att man inaktiverar hela eslint-regeln, vilket inte är särskilt praktiskt. En bättre lösning är att ignorera eslint-felet på just den specifika platsen på detta sätt:

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore

Svar #2

Du kan sluta använda @ts-ignore

Eller så kan du inaktivera eslint-regeln. Lägg till det i din eslint-konfiguration (.eslintrc eller motsvarande)

...
  "rules": {
    "@typescript-eslint/ban-ts-ignore": "off"
  }
...

REDIGERA: Om du använder @typescript-eslint/eslint-plugin version 2.18 eller högre, heter regeln ban-ts-comment och du behöver lägga till

"@typescript-eslint/ban-ts-comment": "off"

istället. Här är ändringsloggen

Svar #3

Jag rekommenderar att tillåta @ts-ignore med en obligatorisk beskrivning. Detta kan uppnås med följande konfiguration i .eslintrc.js. Länk till dokumentation

rules: {
  '@typescript-eslint/ban-ts-comment': [
    'error',
    {'ts-ignore': 'allow-with-description'},
  ],
},

Du måste nu lägga till en description för ignorerandet. Detta görs genom att lägga till ett kolon : efter ignorera-uttalandet och lägga till beskrivningen (denna kan också ha en påtvingad min längd minimumDescriptionLength).

Exempel :

// @ts-ignore: Testing invalid input

Beskrivningen, i det här fallet, skulle vara Testa ogiltig inmatning

Svar #4

Postar som ett svar istället för en kommentar till det accepterade svaret på grund av min bristande rykte. Jag vill fortfarande bidra och eventuellt hjälpa någon.

Regeln för mig var

@typescript-eslint/ban-ts-comment

inte ban-ts-ignore

Svar #5

Sedan TypeScript 3.9 kan @ts-expect-error användas.

När en rad föregås av en/@ts-expect-error-kommentar, kommer TypeScript att undertrycka det felet från att rapporteras; men om det inte finns något fel, kommer TypeScript att rapportera att/@ts-expect-error inte var nödvändigt.

Regeln @typescript-eslint/ban-ts-comment tillåter denna typ av kommentar som standard så länge en beskrivning tillhandahålls som förklarar anledningen.

Till exempel:

// @ts-expect-error: No declaration file for module
import something from 'somemodule';

För övrigt, för att specifikt åtgärda felet angående en saknad deklarationsfil för ett modul, om det verkligen inte finns någon typdefinition att installera från Definitely Typed (t.ex. @types/module_name), kan du då deklarera modulen i vilken .d.ts-fil som helst i projektet för att undertrycka felet.

declare module 'module_name';

Relaterade artiklar