Oba opisuju oblik podataka i često se mogu koristiti zamjenski, ali imaju različite mogućnosti.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Oba opisuju oblik podataka i često se mogu koristiti zamjenski, ali imaju različite mogućnosti.
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 je opći alias za bilo koji tip — primitives, unions, tuples, mapped types. interface samo opisuje oblike objekata/funkcija.
interface može učiniti što type ne možeinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Sučelja podržavaju declaration merging (više deklaracija se kombinira) i predstavljaju idiomatski način za proširenje/augmentaciju, uključujući augmentaciju tipova biblioteka trećih strana.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Česta konvencija: koristite interface za oblike objekata i javne API-je (bolje poruke o greškama, proširivi, spojedivi) i type kada trebate unions, tuples ili druge operacije tipa. Odaberite jedan kao zadanu vrijednost za dosljednost — mnogi timovi zadanu vrijednost postavljaju na interface za objekte i posežu za type samo kada je njegov dodatni mogućnosti potrebni.