В чем разница между следующими?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
javascript
typescript
Martiansnoop
источник
источник
Ответы:
Возможности расширения интерфейсов
а также дополнен
Псевдонимы типов, однако, могут представлять то, что интерфейсы не могут
В общем, если у вас есть простой тип объекта, как показано в вашем вопросе, интерфейс обычно является лучшим подходом. Если вы обнаружите, что хотите написать что-то, что не может быть написано как интерфейс, или хотите просто дать чему-то другое имя, лучше использовать псевдоним типа.
источник
Type aliases, however, can represent some things interfaces can't
Как мне кажется, ваши примерыNeatAndCool
иJustSomeOtherName
могут быть созданы как интерфейс, расширяющий существующиеNeat
,Cool
илиSomeType
типы.interface NeatAndCool extends Neat, Cool {}
interface JustSomeOtherName extends SomeType {}
Также может быть реализован интерфейс .
источник
class Thing implements Neat, Cool
Типы похожи на интерфейсы и наоборот: оба могут быть реализованы классом. но есть некоторые важные отличия: 1. Когда Тип реализуется классом, свойства, принадлежащие Типу, должны быть инициализированы внутри класса, тогда как с Интерфейсом они должны быть объявлены. 2. как упомянул @ryan: интерфейс может расширять другой интерфейс. Типы не могут.
источник
Различия между ними тоже уже в этой теме.
Здесь
type Foo
иinterface Foo
выглядит почти одинаково, так что это сбивает с толку.interface
это договор, что следующие свойства (здесьfoo:string
) должны быть в объекте.interface
нетclass
. Он используется, когда язык не поддерживает множественное наследование. Такinterface
может быть общая структура между разными классами.Но
type
иinterface
используются в совсем другом контексте.Вот
type
изfoo
этоFoo
иtoday
естьDate
. Это похоже на удаление переменной, которое содержит информацию о типе другой переменной.type
похож на надмножество интерфейсов, классов, сигнатуры функции, других типов или даже значений (напримерtype mood = 'Good' | 'Bad'
). В концеtype
описывается возможная структура или значение переменной.источник
Неправильно говорить «Интерфейсы могут быть реализованы», поскольку типы также могут быть реализованы
Хотя вы можете это сделать, вы не можете реализовать тип, который является объединением типов, что, честно говоря, имеет смысл :)
источник
Тип в машинописном тексте используется для ссылки на уже существующие типы . Не может быть продлен вроде
interface
. Примерыtype
:вы можете использовать Rest и Spread в типах:
Интерфейс, с другой стороны, позволяет вам создать НОВЫЙ ТИП.
источник