¿Es posible tener argumentos de constructor opcionales con valor predeterminado, como este?
export class Test {
constructor(private foo?: string="foo", private bar?: string="bar") {}
}
Esto me da el siguiente error:
El parámetro no puede tener un signo de interrogación ni un inicializador.
Me gustaría crear instancias como
x = new Test(); // x.foo === 'foo'
x = new Test('foo1'); // x.foo === 'foo1'
x = new Test('foo1', 'bar1');
¿Cuál es la forma correcta de mecanografiado para lograr esto?
Un argumento que tiene un valor predeterminado es opcional por definición, como indicado en los documentos:
Los parámetros inicializados por defecto que vienen después de todos los parámetros obligatorios se tratan como opcionales y, al igual que los parámetros opcionales, se pueden omitir al llamar a su función respectiva.
Es lo mismo para los constructores que para otras funciones, así que en su caso:
export class Test {
constructor(private foo: string = "foo", private bar: string = "bar") {}
}
-
private foo = "foo", private bar = "bar"
Supongo que el tipo se puede inferir aquí.– André Elrico
14 de junio de 2019 a las 11:32
-
en mi propia preferencia personal siempre me gusta escribir definir incluso cuando es obvio
–Derek Lawrence
9 oct 2019 a las 16:53
-
¿Cómo hace esto con parámetros desestructurados, de la manera más breve posible, sin duplicar la lista de campos desestructurados?
– Dan Dascalescu
4 de marzo de 2020 a las 2:42
Puede agregar un signo de interrogación después de sus argumentos, que es más limpio. Si agrega parámetros predeterminados, debería ser opcional por defecto.
export class Test {
foo: string;
bar: string;
constructor(foo?: string, bar?: string) {
this.foo = foo;
this.bar = bar;
}
}