122 votes

Peut-on spécifier plusieurs contraintes de type pour les génériques TypeScript ?

J'ai une interface générique comme cet exemple avec une seule contrainte de type :

export interface IExample<T extends MyClass> {
    getById(id: number): T;
}

Est-il possible de spécifier plusieurs contraintes de type au lieu d'une seule ?

155voto

STO Points 4597

Typescript n'offre pas de syntaxe pour obtenir l'héritage multiple pour les types génériques. Cependant, vous pouvez obtenir une sémantique similaire en utilisant les types Union et Intersection. Dans votre cas, vous voulez une intersection :

interface Example<T extends MyClass & OtherClass> {}

Pour une Union des deux types :

interface Example<T extends MyClass | OtherClass> {}

41voto

Steve Fenton Points 55265

Une solution serait d'utiliser une super-interface (ce qui répond également à la question "pourquoi autoriser une interface à hériter d'une classe").

interface ISuperInterface extends MyClass, OtherClass {

}

export interface IExample<T extends ISuperInterface> {
    getById(id: number): T;
}

1voto

andyks Points 458

Ref le commentaire sur une interface dérivant d'une classe... qu'est-ce qu'un nom ?

J'ai trouvé ceci dans la section 3.5 de la spécification 0.9.0 :

Les déclarations d'interface n'introduisent que des types nommés, alors que les classes introduisent des types nommés et des fonctions de construction qui créent des instances d'implémentations de ces types nommés. Les types nommés nommés introduits par les déclarations de classes et d'interfaces n'ont que des différences mineures mineures (les classes ne peuvent pas déclarer de membres optionnels et les interfaces et les interfaces ne peuvent pas déclarer de membres privés) et sont dans la plupart des contextes interchangeables. En particulier, les déclarations de classes avec seulement des membres publics membres publics introduisent des types nommés qui fonctionnent exactement comme ceux créés par des déclarations d'interface.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X