Antworten:
Das Schlüsselwort extendskann nur für Schnittstellen und Klassen verwendet werden.
Wenn Sie nur einen Typ mit zusätzlichen Eigenschaften deklarieren möchten, können Sie den Schnittpunkttyp verwenden :
type UserEvent = Event & {UserId: string}
UPDATE für TypeScript 2.2 ist es jetzt möglich, eine Schnittstelle zu haben, die den objektähnlichen Typ erweitert , wenn der Typ einige Einschränkungen erfüllt:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Es funktioniert nicht umgekehrt - UserEventmuss als Schnittstelle deklariert werden, nicht als Schnittstelle, typewenn Sie extendsSyntax verwenden möchten .
Und es ist immer noch unmöglich, extend mit beliebigen Typen zu arbeiten - zum Beispiel funktioniert es nicht, wenn Eventes sich um einen Typparameter ohne Einschränkungen handelt.
interface A<T> extends B<T> {blar}Eine Schnittstelle kann einen Objekttyp oder eine Schnittmenge von Objekttypen nur mit statisch bekannten
interface Identifiable<T> extends T { id: string }mir Fehler "Eine Schnittstelle kann nur einen Objekttyp oder Schnittpunkt von Objekttypen mit statisch bekannten Mitgliedern erweitern.ts (2312)"
Was Sie erreichen wollen, ist gleichbedeutend mit
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Die Art und Weise, wie Sie die Typen definiert haben, ermöglicht keine Angabe der Vererbung. Sie können jedoch mithilfe von Schnittpunkttypen etwas Ähnliches erreichen, wie Artem hervorhob .
interfacewenn ich eigentlich atype
typeSchlüsselwort wird verwendet, um Typaliasnamen zu definieren , keine Schnittstellen oder Klassen.