Скажем, у меня такой тип:
type Event = {
name: string;
dateCreated: string;
type: string;
}
Теперь я хочу расширить этот тип, т.е.
type UserEvent extends Event = {
UserId: string;
}
Это не работает Как я могу это сделать?
javascript
typescript
Kousha
источник
источник
type
Ключевое слово используется для определения псевдонимов типов , а не интерфейсов или классов.Ответы:
Ключевое слово
extends
может использоваться только для интерфейсов и классов.Если вы просто хотите объявить тип, который имеет дополнительные свойства, вы можете использовать тип пересечения :
ОБНОВЛЕНИЕ для TypeScript 2.2, теперь возможно иметь интерфейс, расширяющий объектоподобный тип , если тип удовлетворяет некоторым ограничениям:
Он не работает наоборот -
UserEvent
должен быть объявлен как интерфейс, а не,type
если вы хотите использоватьextends
синтаксис.И все еще невозможно использовать
extend
с произвольными типами - например, он не работает, еслиEvent
является параметром типа без каких-либо ограничений.источник
interface A<T> extends B<T> {blar}
Интерфейс может только расширять тип объекта или пересечение типов объектов со статически известными членамиinterface Identifiable<T> extends T { id: string }
выдает ошибку «Интерфейс может расширять только тип объекта или пересечение типов объектов со статически известными members.ts (2312)»вы можете пересекать типы:
где-то в вашем коде теперь вы можете сделать:
источник
То, чего вы пытаетесь достичь, эквивалентно
То, как вы определили типы, не позволяет указать наследование, однако вы можете добиться чего-то подобного, используя типы пересечения, как указал артем .
источник
interface
когда я на самом деле имею в видуtype
Может быть, ниже подход будет полезен для кого-то TS с реагировать
источник