В чем разница между этими утверждениями (интерфейс против типа)?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
typescript
wonea
источник
источник
Ответы:
Согласно спецификации языка TypeScript :
Спецификация продолжает упоминать:
источник
interface Point { x: number; } interface Point { y: number; }
extends or implements
уже не тот. Тип может быть расширен и реализован с помощьюclass
. Вот пример typescriptlang.org/play/…2019 Обновление
Текущие ответы и официальная документация устарели. А для новичков в TypeScript используемая терминология непонятна без примеров. Ниже приведен список актуальных различий.
1. Объекты / Функции
Оба могут использоваться для описания формы объекта или сигнатуры функции. Но синтаксис отличается.
Интерфейс
Введите псевдоним
2. Другие типы
В отличие от интерфейса, псевдоним типа может также использоваться для других типов, таких как примитивы, объединения и кортежи.
3. Расширить
Оба могут быть расширены, но, опять же, синтаксис отличается. Кроме того, обратите внимание, что интерфейс и псевдоним типа не являются взаимоисключающими. Интерфейс может расширять псевдоним типа, и наоборот.
Интерфейс расширяет интерфейс
Тип псевдоним расширяет тип псевдоним
Интерфейс расширяет псевдоним типа
Тип псевдоним расширяет интерфейс
4. Реализует
Класс может реализовывать интерфейс или псевдоним типа, оба одинаково точно. Обратите внимание, что класс и интерфейс считаются статическими чертежами. Поэтому они не могут реализовать / расширить псевдоним типа, который называет тип объединения.
5. Декларация о слиянии
В отличие от псевдонима типа, интерфейс может быть определен несколько раз и будет рассматриваться как единый интерфейс (с объединением элементов всех объявлений).
источник
type
илиinterface
? Я все еще смущен, когда я должен использовать один или другой.Начиная с TypeScript 3.2 (ноябрь 2018 г.), верно следующее:
источник
type
определенные ограничения (а в TypeScript 3.7 эти ограничения также исчезли). Интерфейсы могут расширять типы. Классы могут реализовывать типы. Кроме того, представление данных в виде скриншота таблицы делает ее полностью недоступной для людей с нарушениями зрения.https://www.typescriptlang.org/docs/handbook/advanced-types.html
источник
Примеры с типами:
// создаем древовидную структуру для объекта. Вы не можете сделать то же самое с интерфейсом из-за отсутствия пересечения (&)
// введите, чтобы ограничить переменную, чтобы назначить только несколько значений. Интерфейсы не имеют объединения (|)
// благодаря типам вы можете объявить тип NonNullable благодаря условному механизму.
Примеры с интерфейсом:
// вы можете использовать интерфейс для ООП и использовать «инструменты» для определения каркаса объекта / класса
// вы можете расширить интерфейсы с другими интерфейсами
источник
В дополнение к блестящим ответам, уже предоставленным, есть заметные различия, когда речь идет о расширении типов по сравнению с интерфейсами. Недавно я столкнулся с парой случаев, когда интерфейс не может выполнить работу:
источник
документация объяснила
Интерфейсы против псевдонимов типа
источник