Beide mechanismen — interface en type alias — stellen je in staat om datastructuren (objecten, functies, complexe types) te beschrijven.
Verschillen:
|) en door elkaar (&).Voorbeeld:
interface Animal { name: string } interface Dog extends Animal { bark(): void } // type alias voor samenvoegen van types: type MyType = string | number type Cat = Animal & { purr(): void }
Aanbevolen:
interface.type.Vraag: Kun je een nieuw veld aan een type dat is gedefinieerd via type alias in een ander bestand toevoegen?
Antwoord:
Nee. Type alias kan niet declaratief worden uitgebreid vanuit een ander bestand, in tegenstelling tot interface.
Voorbeeld:
// main.ts type User = { name: string } // another.ts type User = { age: number } // Fout: Duplicate identifier // interface: // main.ts interface User { name: string } // another.ts interface User { age: number } // Ok, User = { name: string, age: number }
Verhaal
In een groot project werden algemene datastructuren gedefinieerd via type alias. Toen het nodig was om een veld toe te voegen aan een bestaand type uit een ander pakket, bleek dat type alias geen declaration merging ondersteunt — het moest worden herschreven naar interface, wat vertragingen veroorzaakte.
Verhaal
Een van de ontwikkelaars beschreef functies via interface en probeerde vervolgens een Union type (een string of functie) toe te voegen — het bleek dat interface hiervoor niet geschikt was en het moest worden gewijzigd naar type alias met intersection/union.
Verhaal
Na de wijziging van het type van interface naar type alias werd de syntaxis voor uitbreiding verwisseld: geprobeerd om extends te gebruiken in plaats van samenvoegen via &. De fout bleek laat en men begreep niet meteen de oorzaak.