简体   繁体   中英

How to define optional constructor arguments with defaults in Typescript

Is it possible to have optional constructor arguments with default value, like this

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

This gives me the following error:

Parameter cannot have question mark and initializer.

I would like to create instances like

x = new Test();               // x.foo === 'foo'            
x = new Test('foo1');         // x.foo === 'foo1'
x = new Test('foo1', 'bar1');

What is the correct typescript way to achieve this?

An argument which has a default value is optional by definition, as stated in the docs :

Default-initialized parameters that come after all required parameters are treated as optional, and just like optional parameters, can be omitted when calling their respective function

It's the same for constructors as it is for other functions, so in your case:

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

You can add question mark after your args, which is cleaner. If you add default parameters, it should be optional by default.

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM