In TypeScript è possibile estendere (heritare) i tipi sia con interface extends, sia con type & type (intersection types). Anche le interfacce possono estendere i tipi e viceversa.
Interfacce utilizzano la parola chiave extends per ereditare le proprietà:
interface Animal { name: string; } interface Bird extends Animal { wings: number; }
Tipi possono essere uniti tramite &:
type Animal = { name: string }; type Bird = Animal & { wings: number };
Inoltre, un'interfaccia può estendere un altro tipo:
type Base = { id: number }; interface Derived extends Base { description: string; }
Caratteristiche:
È possibile estendere un tipo (type) tramite un'interfaccia o viceversa? Qual è l'errore commesso dalla maggior parte?
Molti credono che sia possibile estendere solo interfacce tramite interfacce, ma in realtà un'interfaccia può estendere un tipo:
type Basic = { flag: boolean }; interface Extra extends Basic { name: string; }
Ma un tipo non può estendere altri tipi tramite extends — solo tramite intersezione di tipi (&).
Storia
Storia
Storia
Il team riteneva che un'interfaccia non potesse essere estesa tramite un tipo, e per estendere la funzionalità comune riscrivevano tutte le strutture da type a interface, sprecando molto tempo e sforzi — mentre sarebbe stato possibile semplicemente estendere i tipi esistenti in modo non standard.