Respuestas:
La palabra clave extendsse puede usar solo para interfaces y clases.
Si solo desea declarar un tipo que tiene propiedades adicionales, puede usar el tipo de intersección :
type UserEvent = Event & {UserId: string}
ACTUALIZACIÓN para TypeScript 2.2, ahora es posible tener una interfaz que amplíe el tipo de objeto , si el tipo cumple algunas restricciones:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
No funciona al revés: UserEventdebe declararse como interfaz, no typesi desea utilizar la extendssintaxis.
Y todavía es imposible de usar extend con tipos arbitrarios ; por ejemplo, no funciona si Eventes un parámetro de tipo sin restricciones.
interface A<T> extends B<T> {blar}Una interfaz solo puede extender un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente
interface Identifiable<T> extends T { id: string }me da el error "Una interfaz solo puede extender un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente
Lo que estás tratando de lograr es equivalente a
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
La forma en que definió los tipos no permite especificar la herencia, sin embargo, puede lograr algo similar usando los tipos de intersección, como señaló Artem .
interfacecuando realmente me refiero a untype
typepalabra clave se utiliza para definir alias de tipo , no interfaces o clases.