Båda beskriver formen på data och är ofta utbytbara, men de har olika möjligheter.
ts
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Vad type kan göra som interface inte kan
ts
type 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 är ett generellt alias för vilken som helst typ — primitiver, unioner, tupler, mappade typer. interface beskriver endast objekt/funktionsformer.
Vad interface kan göra som type inte kan
ts
interface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Interfaces stöder deklarationssammanslagning (flera deklarationer kombineras) och är det idiomatiska sättet att utöka/förbättra, inklusive förföring av tredjepartsbibliotekstyper.
Utökningssyntax
ts
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Vilken ska man använda
En vanlig konvention: använd interface för objektformer och offentliga API:er (bättre felmeddelanden, utbyggbar, sammanslöbar) och type när du behöver unioner, tupler eller andra typoperationer. Välj en som standard för konsekvens — många team föredrar interface för objekt och använder type endast när dess extra kraft behövs.
