Dites que j'ai le type suivant:
type Event = {
name: string;
dateCreated: string;
type: string;
}
Je souhaite maintenant étendre ce type, c.-à-d.
type UserEvent extends Event = {
UserId: string;
}
Ça ne marche pas. Comment puis-je faire ceci?
Le mot clé extends
ne peut être utilisé que pour les interfaces et les classes.
Si vous souhaitez simplement déclarer un type ayant des propriétés supplémentaires, vous pouvez utiliser type d'intersection :
type UserEvent = Event & {UserId: string}
UPDATE pour TypeScript 2.2, il est maintenant possible d'avoir une interface qui étend le type objet , si le type satisfait quelques restrictions:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Cela ne fonctionne pas dans l'autre sens - UserEvent
doit être déclaré en tant qu'interface et non en tant que type
si vous souhaitez utiliser la syntaxe extends
.
Et il est toujours impossible d'utiliser extend
avec des types arbitraires - par exemple, cela ne fonctionne pas si Event
est un paramètre de type sans aucune contrainte.
vous pouvez intersecter des types:
type TypeA = {
nameA: string;
};
type TypeB = {
nameB: string;
};
export type TypeC = TypeA & TypeB;
quelque part dans votre code, vous pouvez maintenant faire:
const some: TypeC = {
nameB: 'B',
nameA: 'A',
};
Ce que vous essayez d’atteindre équivaut à
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
La manière dont vous avez défini les types ne permet pas de spécifier l'héritage. Toutefois, vous pouvez obtenir quelque chose de similaire en utilisant des types d'intersection, comme indiqué par artem .