TypeScriptInterfejsy i klasy
interface
Nazwany opis kształtu obiektu, który można rozszerzać i łączyć.
Przykład
#TypeScript
interface Course {
id: number
title: string
modules: number
describe(): string
}
const html: Course = {
id: 1,
title: 'HTML i CSS',
modules: 11,
describe() {
return `${this.title}: ${this.modules} modułów`
}
}
console.log(html.describe())Wynik
HTML i CSS: 11 modułów
Definicja i zastosowanie
#Interfejs nadaje nazwę kształtowi obiektu: wymienia jego pola i metody wraz z typami. Obiekt jest zgodny z interfejsem, jeśli ma wymagane właściwości o pasujących typach. Nie musi być tworzony żadną specjalną składnią.
Interfejsy można rozszerzać słowem extends, budując bardziej szczegółowe typy z ogólnych. Klasy mogą je implementować przez implements, co gwarantuje, że mają wymagane metody.
Szczególną cechą interfejsów jest łączenie deklaracji: dwa interfejsy o tej samej nazwie zlewają się w jeden. Dzięki temu biblioteki pozwalają rozszerzać swoje typy z zewnątrz, na przykład dodawać pola do obiektu Window.
Składnia
#Składnia
interface Nazwa {
pole: typ
metoda(param: typ): typ
}Więcej przykładów
#TypeScript
interface Settings {
theme: 'dark' | 'light'
}
interface Settings {
sounds: boolean
}
const settings: Settings = { theme: 'dark', sounds: true }
console.log(Object.keys(settings))Wynik
['theme', 'sounds']
Dobre praktyki
#- Do opisu obiektów i kontraktów klas
interfacejest naturalnym wyborem. Do unii, krotek i typów złożonych użyjtype. - Nazywaj interfejsy od tego, czym obiekt jest (
User,Course), bez przedrostkaI.
Powiązane hasła
#- typeAlias typu: nazwa dla dowolnego typu, także unii, krotek i typów złożonych.
- extends (interfejsy)Rozszerzanie interfejsu o nowe pola, na bazie istniejącego.
- implementsDeklaracja, że klasa spełnia kontrakt opisany interfejsem.
- Pola opcjonalne (?)Właściwości, które mogą, ale nie muszą występować w obiekcie.
Widzisz błąd albo brakuje przykładu? Napisz do nas.