72 votes

Comment définir les arguments optionnels des constructeurs avec des valeurs par défaut dans Typescript ?

Est-il possible d'avoir des arguments optionnels de constructeur avec une valeur par défaut, comme ceci

export class Test {
    constructor(private foo?: string="foo", private bar?: string="bar") {}
}

Cela me donne l'erreur suivante :

Le paramètre ne peut pas avoir de point d'interrogation et d'initialisateur.

Je voudrais créer des instances comme

x = new Test();               // x.foo === 'foo'            
x = new Test('foo1');         // x.foo === 'foo1'
x = new Test('foo1', 'bar1');

Quelle est la manière correcte d'y parvenir dans un script ?

1 votes

Avez-vous essayé constructor(private foo ? foo : string="foo", private bar ? bar : string="bar") {} ?

110voto

Nitzan Tomer Points 11798

Un argument qui a une valeur par défaut est facultatif par définition, comme le montre l'exemple suivant indiqué dans les docs :

Les paramètres initialisés par défaut qui viennent après tous les paramètres obligatoires sont traités comme des paramètres optionnels, et tout comme les paramètres optionnels, peuvent être omis lors de l'appel de leur fonction respective

C'est la même chose pour les constructeurs que pour les autres fonctions, donc dans votre cas :

export class Test {
    constructor(private foo: string = "foo", private bar: string = "bar") {}
}

1 votes

private foo = "foo", private bar = "bar" Je suppose que le type peut être déduit ici.

5 votes

À titre personnel, j'aime toujours taper "définir", même quand c'est évident.

3 votes

Comment faire avec des paramètres déstructurés, aussi succinctement que possible, sans la duplication de la liste des champs déstructurés ?

6voto

csandreas1 Points 692

Vous pouvez ajouter un point d'interrogation après vos args, ce qui est plus propre. Si vous ajoutez des paramètres par défaut, ils doivent être optionnels par défaut.

export class Test {
   foo: string; 
   bar: string;

    constructor(foo?: string, bar?: string) {
    this.foo = foo;
    this.bar = bar;
   }
}

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