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

时间:2017-04-10 14:51:04

标签: javascript typescript

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

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

这给了我以下错误:

参数不能包含问号和初始化程序。

我想创建像

这样的实例
x = new Test();               // x.foo === 'foo'            
x = new Test('foo1');         // x.foo === 'foo1'
x = new Test('foo1', 'bar1');

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

2 个答案:

答案 0 :(得分:52)

根据定义,具有默认值的参数是可选的stated in the docs

  

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

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

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

答案 1 :(得分:1)

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

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

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