ProgrammatieFullstack ontwikkelaar

Vertel over interfaces (interface) en type aliases (type alias) in TypeScript. Wat zijn de verschillen en wanneer kies je de ene of de andere benadering?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Beide mechanismen — interface en type alias — stellen je in staat om datastructuren (objecten, functies, complexe types) te beschrijven.

  • Interface — klassieke interface verklaring. Hiermee kunnen interfaces worden uitgebreid, samengevoegd (declaration merging) en gemakkelijk worden geërfd.
  • Type alias — creëert een nieuwe type alias. Kan worden gecombineerd met behulp van union / intersection en kan aan elke entiteit worden toegewezen: primitieve typen, functies, tuple, enz.

Verschillen:

  • Uitbreidbaarheid: interface is beter voor objectstructuren en ondersteunt declaratieve samenvoeging.
  • Flexibiliteit: type alias is universeel en geschikt voor alles: samenvoegingen (|) 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:

  • Voor openbare API's — gebruik interface.
  • Voor complexe samenvoegingen en aliassen — gebruik type.

Vragen met een valstrik.

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 }

Voorbeelden van echte fouten door onwetendheid over de nuances van het onderwerp.


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.