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