Digamos que eu tenha o seguinte tipo:
type Event = {
name: string;
dateCreated: string;
type: string;
}
Agora eu quero estender esse tipo, ou seja,
type UserEvent extends Event = {
UserId: string;
}
Isso não funciona. Como posso fazer isso?
javascript
typescript
Kousha
fonte
fonte
type
palavra-chave é usada para definir aliases de tipo , não interfaces ou classes.Respostas:
A palavra-chave
extends
pode 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 :
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:
Não funciona ao contrário -
UserEvent
deve ser declarado como interface, e nãotype
se você quiser usar aextends
sintaxe.E ainda é impossível usar
extend
com tipos arbitrários - por exemplo, ele não funciona seEvent
for um parâmetro de tipo sem restrições.fonte
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 estaticamenteinterface 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)"você pode cruzar tipos:
em algum lugar no seu código, agora você pode fazer:
fonte
O que você está tentando alcançar é equivalente a
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.
fonte
interface
quando eu realmente quero dizer atype
Pode estar abaixo da abordagem será útil para alguém TS com reactjs
fonte