В TypeScript расширять (наследовать) типы можно как с помощью interface extends, так и с помощью type & type (intersection types). Также интерфейсы могут расширять типы, и наоборот.
Интерфейсы используют ключевое слово extends для наследования свойств:
interface Animal { name: string; } interface Bird extends Animal { wings: number; }
Типы могут быть объединены через &:
type Animal = { name: string }; type Bird = Animal & { wings: number };
Также интерфейс может расширять другой тип:
type Base = { id: number }; interface Derived extends Base { description: string; }
Особенности:
Можно ли тип (type) расширить через интерфейс или наоборот? Какую ошибку совершает большинство?
Многие считают, что расширять можно только интерфейсы через интерфейсы, но на самом деле интерфейс может расширять тип:
type Basic = { flag: boolean }; interface Extra extends Basic { name: string; }
А вот тип через extends другие типы расширять не может — только через пересечение типов (&).
История
История
История
Команда считала, что interface нельзя расширять типом, и для расширения общего функционала переписывали все структуры с type на interface, тратя много времени и усилий — хотя можно было просто расширять существующие типы нестандартным образом.