Как добиться цепочки конструкторов, подобной C # / Java, в TypeScript?

#typescript

#typescript

Вопрос:

Рассмотрим следующий класс C #:

 class Foo
{   
    public Foo(int id, string name)
    {        
    }

    public Foo(int id) : this(id, "")
    {          
    }        
}
  

Тот же подход в TypeScript не совсем работает:

 class Foo {
    constructor(id: number, name: string) {
    }

    // fails here
    constructor(id: number) this(id, "") {
    }    
}
  

Есть ли практический способ добиться цепочки конструкторов?

Идея состоит в том, чтобы иметь возможность вызывать new Foo(1, "frank") и new Foo(1) .

Ответ №1:

JavaScript и, следовательно, TypeScript не поддерживают перегрузку конструктора или метода, поэтому в вашем классе не может быть более одной реализации конструктора.

Одним из способов достижения желаемого поведения было бы использование параметров по умолчанию:

 class Foo {
    constructor(id: number, name: string = '') {
    }
}
  

Соответствующая документация (но я настоятельно рекомендую вам прочитать ее всю)