Respostas:
A palavra-chave extendspode ser usada apenas para interfaces e classes.
Se você apenas deseja declarar um tipo que possui propriedades adicionais, pode usar o tipo de interseção :
type UserEvent = Event & {UserId: string}
ATUALIZAÇÃO para TypeScript 2.2, agora é possível ter uma interface que estenda o tipo de objeto , se o tipo atender a algumas restrições:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Não funciona ao contrário - UserEventdeve ser declarado como interface, e não typese você quiser usar a extendssintaxe.
E ainda é impossível usar extend com tipos arbitrários - por exemplo, ele não funciona se Eventfor um parâmetro de tipo sem restrições.
interface A<T> extends B<T> {blar}Uma interface só pode estender um tipo de objecto ou intersecção de tipos de objectos com os membros conhecidos estaticamente
interface Identifiable<T> extends T { id: string }me dá o erro "Uma interface só pode estender um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos. T (2312)"
O que você está tentando alcançar é equivalente a
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
A maneira como você definiu os tipos não permite especificar herança, no entanto, é possível obter algo semelhante usando tipos de interseção, como artem apontou.
interfacequando eu realmente quero dizer atype
typepalavra-chave é usada para definir aliases de tipo , não interfaces ou classes.