Odpowiedzi:
Słowa kluczowego extendsmożna używać tylko w przypadku interfejsów i klas.
Jeśli chcesz tylko zadeklarować typ, który ma dodatkowe właściwości, możesz użyć typu przecięcia :
type UserEvent = Event & {UserId: string}
UPDATE dla TypeScript 2.2, można teraz mieć interfejs, który rozszerza typ obiektowy , jeśli typ spełnia pewne ograniczenia:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
To nie działa w drugą stronę - UserEventmusi być zadeklarowane jako interfejs, a nie jako, typejeśli chcesz używać extendsskładni.
Nadal nie można go używać extend z dowolnymi typami - na przykład nie działa, jeśli Eventjest to parametr typu bez żadnych ograniczeń.
interface A<T> extends B<T> {blar}Interfejs może tylko rozszerzać typ obiektu lub przecinanie typów obiektów ze znanymi statycznie elementami
interface Identifiable<T> extends T { id: string }powodując błąd „Interfejs może tylko rozszerzyć typ obiektu lub część
To, co próbujesz osiągnąć, jest równoważne
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Sposób, w jaki zdefiniowałeś typy, nie pozwala na określenie dziedziczenia, jednak możesz osiągnąć coś podobnego za pomocą typów przecięcia, jak wskazał Artem .
interfacekiedy mam na myślitype
typekluczowe służy do definiowania aliasów typów , a nie interfejsów lub klas.