Ce face noImplicitOverride
Cuvântul override spune că o metodă înlocuiește o metodă din clasa de bază. Fără opțiune, este facultativ. Cu noImplicitOverride, o metodă care înlocuiește alta fără override dă eroarea TS4114. Așa vezi imediat ce metode depind de clasa părinte.
Indiferent de opțiune, override pus pe o metodă care nu există în clasa de bază dă eroarea TS4113. Asta prinde metodele redenumite sau șterse din părinte.
Implicit este false și nu face parte din strict.
Parametri
| Parametru | Descriere |
|---|---|
true |
Metodele care înlocuiesc o metodă din clasa de bază trebuie să aibă override. |
false |
Valoarea implicită. override este facultativ. |
Exemple
Exemplul 1: override lipsă și override greșit
Carte.descriere nu are override (TS4114). Revista.pret are override, dar Produs nu are pret (TS4113, apare și fără opțiune).
// tsconfig.json
{
"compilerOptions": {
"noImplicitOverride": true,
"target": "es2022"
}
}
// index.ts
class Produs {
descriere() { return "produs"; }
}
class Carte extends Produs {
descriere() { return "carte"; }
}
class Revista extends Produs {
override descriere() { return "revistă"; }
override pret() { return 10; }
}
console.log(new Carte().descriere(), new Revista().descriere());
Rezultat (tsc 5.9)
$ npx tsc --noEmit
index.ts(6,3): error TS4114: This member must have an 'override' modifier because it overrides a member in the base class 'Produs'.
index.ts(11,12): error TS4113: This member cannot have an 'override' modifier because it is not declared in the base class 'Produs'.
Exemplul 2: Clase corecte
Metoda înlocuită are override; metoda nouă nu are.
class Produs {
constructor(public nume: string) {}
descriere(): string { return `produs: ${this.nume}`; }
}
class Carte extends Produs {
constructor(nume: string, public autor: string) { super(nume); }
override descriere(): string { return `carte: ${this.nume} de ${this.autor}`; }
pagini(): number { return 320; }
}
const c = new Carte("Amintiri din copilărie", "Ion Creangă");
console.log(c.descriere(), c.pagini());
Rezultat
carte: Amintiri din copilărie de Ion Creangă 320
Greșeli frecvente
- Să crezi că
overrideschimbă comportamentul la rulare. Este doar o verificare și dispare din JavaScript-ul generat.
Comenzi înrudite
strictPropertyInitialization: Dă eroare pentru proprietățile de clasă declarate, dar care nu primesc valoare nici la declarare, nici în constructor.useDefineForClassFields: Câmpurile de clasă se comportă ca în standardul JavaScript (definite cu Object.defineProperty), nu ca atribuiri în constructor.