npm - Typescript ignorera fel i en viss fil via konfiguration


Är det möjligt att ignorera TypeScript-fel i en viss fil via tsconfig.json? Jag vet att det finns en exclude-egenskap som beskrivs på deras webbplats, men det är inte vad jag letar efter. Som nämnt:

Om en fil B.ts refereras av en annan fil A.ts, kan B.ts inte uteslutas om inte den refererande filen A.ts också anges i "exclude"-listan.

Det är ganska logiskt att när du använder ett visst npm-paket kommer det alltid att kontrolleras av TypeScript. Även om du försöker hårt att exclude hela node_modules eller bara ett specifikt. Du kommer att misslyckas. Så om det finns TypeScript-fel i en viss fil i node-moduler (på grund av någon anledning, föråldrade typer, versionsmissanpassning, ...), då sitter du fast.

Allt jag letar efter är ett alternativ för att ignorera TypeScript-fel i en viss biblioteksfil som jag inte kan redigera. Något som // @ts-nocheck, men på tsconfig.json-nivå:

{
  "nocheck": [
    "node_modules/redux-thunk/index.d.ts"
  ]
}

Compiler-alternativet skipLibCheck är inte en lösning. Jag skulle fortfarande vilja fortsätta kontrollera andra bibliotek.

Svar #1

TL;DR du kan inte:

Du kan utesluta en fil från kompilering (med ett globmönster) men så snart du importerar den filen kommer den förstås att inkluderas och bli en del av din kompilering.

TS kommer därför att kontrollera denna fil efter fel. Eftersom felen tillhör filen och inte importen, finns det inget sätt att säga till TS, importera TS men ignorera felen.

Du behöver därför ta bort typningen. Ett möjligt sätt att kringgå detta är att importera den kompilerade js-filen direkt vilket kommer att ta bort typdefinitionsfilen (och därmed eventuellt relaterade "buggar").

Den senaste versionen av TS bör normalt låta dig importera js-filer med det fullständiga explicita filnamnet. Ett annat hack kan också vara att importera ditt beroende med require istället för import.

Sist men inte minst, här är möjliga lösningar:

  • Kanske har modul du importerar .ts-filer (medan npm-paket inte bör inkludera .ts-filer, bara .d.ts), och kanske importerar du en av dessa .ts-filer, vilket du definitivt inte borde göra.
  • Din modul levereras inte med dess typning, och du importerar fel TS-definitionsversion @types/packageName
  • Din TS-version är inte uppdaterad, eller så riktar din modul sig mot en annan TS
  • I värsta fall kan du fortfarande skapa en lokal version av den felaktiga npm-modulen, fixa den lokalt och använda den

Svar #2

Det finns ett sätt att kringgå detta problem. Om det finns några felaktiga typer i paketet kan du lägga till en fil i ditt projekt som importerar variablerna med fel typ och exporterar dem med rätt typ, och sedan använda Typescripts sökvägskartläggning för att använda dina egna typer istället för paketets:

node_modules/package/wrongType.js-fil:

"use strict";
exports.__esModule = true;
exports.Test = exports.TestFn = void 0;
function TestFn(input) {
    if (typeof input === "string")
        return "string";
    return 2;
}
exports.TestFn = TestFn;
exports.Test = {
    a: "salam",
    b: 2,
    c: TestFn(80)
};

Fil node_modules/package/wrongType.d.ts:

export interface TestType {
    a: string;
    b: string;
    c: string;
}
export declare function TestFn(input: any): number;
export declare const Test: TestType;

tsconfig.json-fil:

  "compilerOptions": {
    ...
    "paths": {
      "package/wrongType": ["src/components/rightType"]
    }
    ...

filen src/components/rightType.ts:

import { Test as WrongTest } from "package/wrongType";

interface TestType {
  a: string;
  b: number;
  c: number;
}

// @ts-ignore
export const Test: TestType = WrongTest;

Nu kommer TypeScript överallt där det står import { Test } from "package/wrongType" att hitta de korrekta typerna som du definierat, och när paketet är fixat kan du bara ta bort din paths och rightType-fil och allt kommer fortfarande att fungera.

Relaterade artiklar