TypeScriptInterfejsy i klasy
abstract class
Klasa bazowa, której nie można utworzyć bezpośrednio, z metodami do uzupełnienia przez potomków.
Przykład
#TypeScript
abstract class Exercise {
constructor(public title: string) {}
abstract check(answer: string): boolean
run(answer: string): string {
return `${this.title}: ${this.check(answer) ? 'poprawnie' : 'spróbuj jeszcze raz'}`
}
}
class QuestionExercise extends Exercise {
constructor(title: string, private correct: string) {
super(title)
}
check(answer: string): boolean {
return answer.trim().toLowerCase() === this.correct
}
}
const task = new QuestionExercise('Znacznik akapitu', 'p')
console.log(task.run(' P '))
console.log(task.run('div'))Wynik
Znacznik akapitu: poprawnie Znacznik akapitu: spróbuj jeszcze raz
Definicja i zastosowanie
#Klasa abstrakcyjna to szablon dla innych klas. Nie można utworzyć jej obiektu przez new, można ją tylko rozszerzyć. Może zawierać zwykłe metody z kodem i metody abstrakcyjne, które mają tylko sygnaturę.
Każda klasa pochodna musi zaimplementować wszystkie metody abstrakcyjne. Kompilator tego pilnuje, więc wspólna logika zostaje w klasie bazowej, a szczegóły w potomkach.
W odróżnieniu od interfejsu klasa abstrakcyjna może zawierać działający kod i pola. Jeśli potrzebujesz tylko kontraktu bez implementacji, wystarczy interfejs.
Składnia
#Składnia
abstract class Nazwa {
abstract metoda(): typ
zwyklaMetoda() { … }
}Więcej przykładów
#TypeScript
const generic = new Exercise('Coś')
// Błąd: Cannot create an instance of an abstract class.Dobre praktyki
#- Klasa abstrakcyjna sprawdza się, gdy potomkowie dzielą dużo wspólnego kodu. Przy samym kontrakcie wybierz interfejs.
- Nie buduj długich łańcuchów dziedziczenia. Często prostsza jest kompozycja funkcji lub obiektów.
Powiązane hasła
#Widzisz błąd albo brakuje przykładu? Napisz do nas.