Mindkettő az adatok alakját írja le és gyakran felcserélhetőek, de eltérő képességeik vannak.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Mindkettő az adatok alakját írja le és gyakran felcserélhetőek, de eltérő képességeik vannak.
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
A type egy általános alias bármilyen típushoz — primitívek, unionok, tuplok, leképezett típusok. Az interface csak objektum/függvény alakokat ír le.
interface, amit a type neminterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
A felületek támogatják a declaration merging-et (több deklaráció kombinálódik) és ez az idiomatikus módja a kiterjesztésnek/kiegészítésnek, beleértve a harmadik féltől származó könyvtártípusok kiterjesztését.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Egy közös egyezmény: használja az interface-t objektumformák és nyilvános API-k számára (jobb hibaüzenetek, kiterjeszthetőbb, összeolvasztható) és a type-ot, ha unionokra, tuplokra vagy más típusműveletekre van szüksége. Válasszon egyet alapértelmezettként a konzisztencia érdekében — sok csapat az objektumokhoz alapértelmezés szerint az interface-t használja, és csak akkor veszi elő a type-ot, ha annak extra erejére szükség van.