Risposte:
La parola chiave extendspuò essere utilizzata solo per interfacce e classi.
Se si desidera dichiarare un tipo con proprietà aggiuntive, è possibile utilizzare il tipo di intersezione :
type UserEvent = Event & {UserId: string}
AGGIORNAMENTO per TypeScript 2.2, ora è possibile avere un'interfaccia che estende il tipo di oggetto , se il tipo soddisfa alcune restrizioni:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Non funziona al contrario - UserEventdeve essere dichiarato come interfaccia, non typese si desidera utilizzare la extendssintassi.
Ed è ancora impossibile da usare extend con tipi arbitrari - ad esempio, non funziona se Eventè un parametro di tipo senza vincoli.
interface A<T> extends B<T> {blar}Un'interfaccia può estendere solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri staticamente noti
interface Identifiable<T> extends T { id: string }modo mi dà l'errore "Un'interfaccia può estendere solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri staticamente conosciuti (2312)"
Quello che stai cercando di ottenere è equivalente
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Il modo in cui hai definito i tipi non consente di specificare l'ereditarietà, tuttavia puoi ottenere qualcosa di simile usando i tipi di intersezione, come sottolineato da Artem .
interfacequando intendo davvero untype
typeparola chiave viene utilizzata per definire alias di tipo , non interfacce o classi.