Beide beschrijven de vorm van gegevens en zijn vaak uitwisselbaar, maar ze hebben verschillende mogelijkheden.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Beide beschrijven de vorm van gegevens en zijn vaak uitwisselbaar, maar ze hebben verschillende mogelijkheden.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
typeinterfacetype ID = string | number; // unions
type Pair = [number, number]; // tuples
type Name = User["name"]; // indexed/mapped/conditional types
type Nullable<T> = T | null; // wrap any type
type is een algemeen alias voor elk type — primitieven, unions, tuples, mapped types. interface beschrijft alleen object-/functievormen.
interface kan dat type niet kaninterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Interfaces ondersteunen declaration merging (meerdere declaraties combineren) en zijn de idiomatische manier om uit te breiden/uit te bereiden, inclusief het uitbreiden van types uit biblioteken van derden.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Een veelgebruikte conventie: gebruik interface voor object shapes en public APIs (betere foutmeldingen, uitbreidbaar, mergeable), en type wanneer je unions, tuples, of andere type-operaties nodig hebt. Kies één als standaard voor consistentie — veel teams gebruiken standaard interface voor objecten en grijpen alleen naar type als de extra kracht nodig is.