【问题标题】:How to define optional constructor arguments with defaults in Typescript如何在 Typescript 中使用默认值定义可选的构造函数参数
【发布时间】:2017-09-05 16:29:06
【问题描述】:

是否可以有默认值的可选构造函数参数,像这样

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');

实现此目的的正确 typescript 方法是什么?

【问题讨论】:

  • 你试过constructor(private foo ? foo : string="foo", private bar ? bar : string="bar") {}吗?

标签: javascript typescript


【解决方案1】:

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

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

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

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

【讨论】:

  • private foo = "foo", private bar = "bar" 我猜这里可以推断出类型。
  • 根据我个人的喜好,我喜欢总是输入define,即使它很明显
  • 如何在没有duplicating the list of destructured fields的情况下使用解构参数尽可能简洁地做到这一点?
【解决方案2】:

你可以在你的 args 后面加上问号,这样更简洁。如果添加默认参数,默认情况下应该是可选的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多