Оба описывают форму данных и часто взаимозаменяемы, но имеют различные возможности.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Оба описывают форму данных и часто взаимозаменяемы, но имеют различные возможности.
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 — это универсальный alias для любого типа — примитивов, объединений, кортежей, составных типов. interface описывает только формы object/function.
interface, но не может typeinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Interfaces поддерживают declaration merging (несколько объявлений объединяются) и являются идиоматичным способом расширения/дополнения, включая дополнение типов сторонних библиотек.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Общее соглашение: используйте interface для форм object и публичных API (лучшие сообщения об ошибках, расширяемые, объединяемые) и type когда вам нужны объединения, кортежи или другие операции типов. Выберите один в качестве стандарта для консистентности — многие команды используют interface по умолчанию для объектов и прибегают к type только когда необходима его дополнительная мощь.