Ambele descriu forma datelor și sunt adesea interschimbabile, dar au capabilități diferite.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Ambele descriu forma datelor și sunt adesea interschimbabile, dar au capabilități diferite.
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 este un alias general pentru orice tip — primitivi, unions, tuples, mapped types. interface descrie doar forme de object/function.
interface pe care type nu poateinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Interfaces suportă declaration merging (mai multe declarații se combină) și sunt modalitatea idiomatică de a extinde/augmenta, inclusiv augmentarea tipurilor bibliotecilor terțe.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
O convenție comună: folosiți interface pentru forme de object și API-uri publice (mesaje de eroare mai bune, extensibile, fuzionabile) și type când aveți nevoie de unions, tuples sau alte operații de tip. Alegeți una ca implicit pentru consistență — multe echipe implicitează interface pentru obiecte și recurg la type doar când puterea sa suplimentară este necesară.