@ts-ignore și @ts-expect-error în TypeScript

Comentarii care opresc raportarea erorii de pe linia următoare; @ts-expect-error cere ca eroarea să existe.

Sintaxă
// @ts-expect-error motivul
linie cu eroare;
// @ts-ignore
linie;
// @ts-nocheck   (la începutul fișierului)

Ce face @ts-ignore și @ts-expect-error

Un comentariu // @ts-ignore face ca tsc să nu raporteze nicio eroare de pe linia următoare. // @ts-expect-error face același lucru, dar cere ca linia să aibă o eroare: dacă eroarea dispare (de exemplu după o reparație), primești eroarea Unused ‘@ts-expect-error’ directive. De aceea @ts-expect-error este alegerea mai bună: nu rămân comentarii uitate. @ts-ignore există din TypeScript 2.6, @ts-expect-error din 3.9.

Sunt utile în teste (când verifici intenționat că o funcție respinge un tip greșit) și, temporar, la migrarea codului vechi. Scrie mereu motivul după directivă. Ele ascund toate erorile de pe linie, nu doar pe cea la care te gândești.

// @ts-nocheck la începutul unui fișier oprește verificarea în tot fișierul; // @ts-check o pornește într-un fișier JavaScript (vezi JSDoc). Comentariile nu schimbă JavaScript-ul generat: codul rulează exact cum este scris.

Exemple

Exemplul 1: Test care verifică o eroare de tip

Linia de după comentariu are o eroare de tip (text în loc de număr), dar compilarea trece. La rulare, funcția primește textul și îl respinge.

function nota(valoare: number): number {
    if (typeof valoare !== "number") throw new TypeError(`nota trebuie să fie număr, nu ${typeof valoare}`);
    return valoare;
}

try {
    // @ts-expect-error testăm intenționat un argument de tip greșit
    nota("zece");
} catch (e) {
    console.log((e as Error).message);
}
console.log(nota(10));

Rezultat

nota trebuie să fie număr, nu string
10

Exemplul 2: Directivă care nu mai are motiv

Linia nu mai conține nicio eroare, deci @ts-expect-error devine el însuși o eroare. Cu @ts-ignore ar fi rămas uitat în cod.

function nota(valoare: number): number {
    return valoare;
}
// @ts-expect-error
console.log(nota(10));

Eroarea afișată de tsc

exemplu.mts(4,1): error TS2578: Unused '@ts-expect-error' directive.

Greșeli frecvente

  • Pui @ts-ignore în loc să repari tipul. Eroarea ascunsă revine la rulare.
  • Pui directiva cu o linie mai sus sau mai jos. Se aplică doar liniei imediat următoare.

Comenzi înrudite

  • strict mode: Opțiunea strict pornește toate verificările stricte: null separat, fără any implicit, câmpuri inițializate și altele.
  • JSDoc cu tipuri: Tipuri scrise în comentarii JSDoc, ca TypeScript să verifice fișiere JavaScript fără să le transformi în .ts.
  • any: Tipul care oprește verificarea: o valoare any acceptă orice și poate fi folosită oricum, fără erori de compilare.
  • as (type assertion): Îi spui compilatorului ce tip are o valoare, când știi mai mult decât el; nu face nicio conversie la rulare.