How to define optional constructor arguments with defaults in Typescript

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;
   }
}

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") {}
}