是否可以使用默认值的可选构造函数参数,例如
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');
实现这一目标的正确打字方式是什么?
答案 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;
}
}