TypeScriptInterfejsy i klasy
implements
Deklaracja, że klasa spełnia kontrakt opisany interfejsem.
Przykład
#TypeScript
interface Scorable {
score(): number
}
class Quiz implements Scorable {
constructor(private correct: number, private total: number) {}
score(): number {
return Math.round((this.correct / this.total) * 100)
}
}
const quiz = new Quiz(8, 10)
console.log(`Wynik: ${quiz.score()}%`)Wynik
Wynik: 80%
Definicja i zastosowanie
#Słowo implements po nazwie klasy mówi kompilatorowi, że klasa musi mieć wszystkie pola i metody z podanego interfejsu. Jeśli czegoś zabraknie albo typy się nie zgadzają, pojawi się błąd.
To sprawdzenie dotyczy tylko typów: implements nie dziedziczy żadnego kodu. Klasa musi sama zaimplementować wszystkie metody. Do dziedziczenia kodu służy extends między klasami.
Jedna klasa może implementować kilka interfejsów, co pozwala opisywać niezależne możliwości, na przykład Serializable i Comparable.
Składnia
#Składnia
class Nazwa implements Interfejs1, Interfejs2 {
…
}Więcej przykładów
#TypeScript
class Exam implements Scorable {}
// Błąd: Class 'Exam' incorrectly implements interface 'Scorable'.
// Property 'score' is missing in type 'Exam' but required in type 'Scorable'.Dobre praktyki
#implementsnie zmienia typów wewnątrz klasy. Parametry metod i tak musisz otypować w samej klasie.- Interfejsy opisujące możliwości (co obiekt umie) łączą się lepiej niż głębokie dziedziczenie klas.
Powiązane hasła
#- interfaceNazwany opis kształtu obiektu, który można rozszerzać i łączyć.
- abstract classKlasa bazowa, której nie można utworzyć bezpośrednio, z metodami do uzupełnienia przez potomków.
- public, private, protectedModyfikatory dostępu określające, skąd można używać pól i metod klasy.
- extends (interfejsy)Rozszerzanie interfejsu o nowe pola, na bazie istniejącego.
Widzisz błąd albo brakuje przykładu? Napisz do nas.