Разлики между Type и Interface
Declaration merging (augmentation):
Interfaces поддържат declaration merging, което означава, че можете да дефинирате множество interfaces със същото име и TypeScript ще ги обедини в един interface с комбинирани свойства и методи. От друга страна, types не поддържат declaration merging. Това е полезно, когато искате да добавите допълнителна функционалност или да разширите съществуващи типове, без да променяте оригиналните дефиниции или да поправяте липсващи или некоректни типове.
interface A { x: string;}interface A { y: string;}const j: A = { x: 'xx', y: 'yy',};Разширяване на други типове/interfaces:
Както types, така и interfaces могат да разширяват други типове/interfaces, но синтаксисът е различен. При interfaces използвате ключовата дума extends, за да наследите свойства и методи от други interfaces. Въпреки това, interface не може да разширява сложен тип като union тип.
interface A { x: string; y: number;}interface B extends A { z: string;}const car: B = { x: 'x', y: 123, z: 'z',};При types използвате оператора &, за да комбинирате множество типове в един тип (intersection).
interface A { x: string; y: number;}
type B = A & { j: string;};
const c: B = { x: 'x', y: 123, j: 'j',};Union и Intersection типове:
Types са по-гъвкави при дефиниране на Union и Intersection типове. С ключовата дума type можете лесно да създавате union типове чрез оператора | и intersection типове чрез оператора &. Докато interfaces могат индиректно да представят union типове, те нямат вградена поддръжка за intersection типове.
type Department = 'dep-x' | 'dep-y'; // Union
type Person = { name: string; age: number;};
type Employee = { id: number; department: Department;};
type EmployeeInfo = Person & Employee; // IntersectionПример с interfaces:
interface A { x: 'x';}interface B { y: 'y';}
type C = A | B; // Union от interfaces