ConstructorParameters<Type>

Récupère les types des paramètres du constructeur d’une classe sous forme de tuple.

Sur cette page

Exemple

#
TypeScript
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)
Résultat
[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

#
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 avec new.

Plus d’exemples

#
Une fabrique générique
TypeScript
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.
Résultat
Série de 7 jours 50
Un typeof oublié
TypeScript
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’appel new : 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

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.