W TypeScript można rozszerzać (dziedziczyć) typy zarówno za pomocą interface extends, jak i za pomocą type & type (typy przecięcia). Interfejsy mogą również rozszerzać typy, i odwrotnie.
Interfejsy używają słowa kluczowego extends do dziedziczenia właściwości:
interface Animal { name: string; } interface Bird extends Animal { wings: number; }
Typy mogą być łączone przez &:
type Animal = { name: string }; type Bird = Animal & { wings: number };
Ponadto interfejs może rozszerzać inny typ:
type Base = { id: number }; interface Derived extends Base { description: string; }
Cechy szczególne:
Czy typ (type) może być rozszerzany przez interfejs lub odwrotnie? Jaki błąd popełnia większość?
Wielu uważa, że można rozszerzać tylko interfejsy przez interfejsy, ale w rzeczywistości interfejs może rozszerzać typ:
type Basic = { flag: boolean }; interface Extra extends Basic { name: string; }
Natomiast typy nie mogą być rozszerzane przez extends inne typy — tylko przez przecięcie typów (&).
Historia
Historia
Historia
Zespół uważał, że interfejsu nie można rozszerzać typem, i dla rozszerzenia ogólnej funkcjonalności przepisywał wszystkie struktury z type na interface, tracąc dużo czasu i wysiłku — chociaż można było po prostu rozszerzać istniejące typy w niestandardowy sposób.