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';
