noImplicitOverride
Nadpisanie musi być celowe
Wymaga słowa kluczowego `override` przy każdym składniku, który zastępuje ten z klasy bazowej.
- Od
- TypeScript 4.3
- strict
- Poza strict
- W twoim tsconfigu
"noImplicitOverride": true
Ten sam fragment za każdym razem. Zmieniła się tylko opcja.
Z wyłączoną
"noImplicitOverride": falseclass Base {
greet() {
return 'hi'
}
}
export class Child extends Base {
greet() {
return 'yo'
}
}Kompiluje się czysto
Z włączoną
"noImplicitOverride": trueclass Base {
greet() {
return 'hi'
}
}
export class Child extends Base {
greet() {
return 'yo'
}
}Zgłasza TS4114
Dlaczego kompilator się tym przejmuje
Awaria, której to zapobiega, biegnie w odwrotną stronę niż ta oczywista. Ryzykiem nie jest napisanie `override` na czymś, co niczego nie nadpisuje — tylko klasa bazowa dokładająca metodę, którą podklasa już ma, po cichu zamieniając niezależny składnik w nadpisanie, którego nikt nie przejrzał. Gdy słowo kluczowe jest wymagane, kompilator zauważa, że relacja zmieniła się pod tobą — a to jedyny moment, w którym ta informacja się przydaje.
Wniosek
To słowo kluczowe nie jest dokumentacją. To drut ostrzegawczy na klasie bazowej.
Gdzie iść dalej
Opcji: 22

