Rozdíly mezi typem a rozhraním
Slučování deklarací (rozšíření):
Rozhraní podporují slučování deklarací, což znamená, že můžete definovat více rozhraní se stejným názvem a TypeScript je sloučí do jediného rozhraní se spojenými vlastnostmi a metodami. Typy naproti tomu slučování deklarací nepodporují. To může být užitečné, když chcete přidat další funkčnost nebo přizpůsobit existující typy bez úpravy původních definic nebo opravování chybějících či nesprávných typů.
interface A { x: string;}interface A { y: string;}const j: A = { x: 'xx', y: 'yy',};Rozšiřování jiných typů/rozhraní:
Typy i rozhraní mohou rozšiřovat jiné typy/rozhraní, ale syntaxe se liší. U rozhraní používáte klíčové slovo extends k dědění vlastností a metod z jiných rozhraní. Rozhraní však nemůže rozšiřovat složitý typ, například sjednocení typů.
interface A { x: string; y: number;}interface B extends A { z: string;}const car: B = { x: 'x', y: 123, z: 'z',};U typů používáte operátor & ke spojení více typů do jediného typu (průniku).
interface A { x: string; y: number;}
type B = A & { j: string;};
const c: B = { x: 'x', y: 123, j: 'j',};Sjednocení a průniky typů:
Typy jsou při definování sjednocení a průniků typů flexibilnější. Pomocí klíčového slova type můžete snadno vytvářet sjednocení typů operátorem | a průniky typů operátorem &. Přestože rozhraní mohou také nepřímo reprezentovat sjednocení typů, nemají vestavěnou podporu pro průniky typů.
type Department = 'dep-x' | 'dep-y'; // Union
type Person = { name: string; age: number;};
type Employee = { id: number; department: Department;};
type EmployeeInfo = Person & Employee; // IntersectionPříklad s rozhraními:
interface A { x: 'x';}interface B { y: 'y';}
type C = A | B; // Union of interfaces