如何在Typescript中使用默认值定义可选的构造函数参数

Jea*_*eri 44 javascript typescript

是否可以使用默认值的可选构造函数参数,如下所示

export class Test {
    constructor(private foo?: string="foo", private bar?: string="bar") {}
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

参数不能有问号和初始化器.

我想创建像这样的实例

x = new Test();               // x.foo === 'foo'            
x = new Test('foo1');         // x.foo === 'foo1'
x = new Test('foo1', 'bar1');
Run Code Online (Sandbox Code Playgroud)

实现这一目标的正确打字方式是什么?

Nit*_*mer 62

根据定义,具有默认值的参数是可选的,如文档中所述:

所有必需参数之后的默认初始化参数被视为可选参数,就像可选参数一样,在调用它们各自的函数时可以省略

对于构造函数和其他函数一样,所以在你的情况下:

export class Test {
    constructor(private foo: string = "foo", private bar: string = "bar") {}
}
Run Code Online (Sandbox Code Playgroud)

  • 根据我个人的喜好,我喜欢总是输入定义,即使它很明显 (5认同)
  • 如何使用解构参数尽可能简洁地做到这一点,而不[复制解构字段列表](/sf/ask/1632036451/作为参数/32596200#32596200)? (3认同)

csa*_*as1 7

您可以在参数后面添加问号,这样更清晰。如果添加默认参数,默认情况下它应该是可选的。

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

    constructor(foo?: string, bar?: string) {
    this.foo = foo;
    this.bar = bar;
   }
}
Run Code Online (Sandbox Code Playgroud)