ConstructorParameters<Type>
Récupère les types des paramètres du constructeur d’une classe sous forme de tuple.
Exemple
#class Student {
constructor(public name: string, public level = 1) {}
}
type StudentArgs = ConstructorParameters<typeof Student>
// type StudentArgs = [name: string, level?: number | undefined]
function createMany(rows: StudentArgs[]): Student[] {
return rows.map((args) => new Student(...args))
}
const students = createMany([['Léa', 4], ['Lucas']])
console.log(students)[Student { name: 'Léa', level: 4 }, Student { name: 'Lucas', level: 1 }]Définition et utilisation
#ConstructorParameters<Type> renvoie un tuple avec les types des paramètres du constructeur. Il prend le type de la classe elle-même, c’est-à-dire typeof Badge, et non le type de son instance. Pour constructor(title: string, exp: number), le résultat est [title: string, exp: number].
C’est l’équivalent de Parameters pour les constructeurs. C’est utile dans les fabriques et les fonctions qui créent des objets pour le compte de l’appelant : elles acceptent exactement les mêmes arguments que new, donc changer le constructeur met immédiatement à jour leurs types.
Cela fonctionne aussi avec les classes abstraites et les constructeurs intégrés, par ex. ConstructorParameters<ErrorConstructor>. Vous pouvez extraire un seul argument par index : ConstructorParameters<typeof Student>[0].
Syntaxe
#type Args = ConstructorParameters<typeof Class>Paramètres de type
#Type
type de constructeur
Le type d’une classe (typeof Class) ou d’une autre fonction appelée avecnew.
Plus d’exemples
#function make<C extends new (...args: any[]) => any>(
Cls: C,
...args: ConstructorParameters<C>
): InstanceType<C> {
return new Cls(...args)
}
class Badge {
constructor(public title: string, public exp: number) {}
}
const badge = make(Badge, 'Série de 7 jours', 50)
console.log(badge.title, badge.exp)
make(Badge, 'Série de 7 jours')
// Erreur : Expected 3 arguments, but got 2.Série de 7 jours 50
type Wrong = ConstructorParameters<Student>
// Erreur : Type 'Student' does not satisfy the constraint 'abstract new (...args: any) => any'.
// Type 'Student' provides no match for the signature 'new (...args: any): any'.Bonnes pratiques
#- N’oubliez pas le
typeof. Le seul nom de la classe en position de type désigne l’instance, pas le constructeur. - Associé à
InstanceType, il décrit tout l’appelnew: un type dit ce qui entre, l’autre ce qui en sort. Cela suffit pour écrire une fabrique générique, comme dans le second exemple.
Entrées associées
#- InstanceType<Type>Récupère le type de l’objet créé par le constructeur d’une classe.
- Parameters<Type>Récupère les types des paramètres d’une fonction sous forme de tuple.
- TuplesDes tableaux de longueur fixe où chaque position a son propre type.
- Génériques <T>Types et fonctions avec un paramètre de type, qui fonctionnent pour plusieurs types sans perdre en précision.
- abstract classUne classe de base que vous ne pouvez pas créer directement, avec des méthodes à compléter par ses descendants.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.