В классах это работает так же, как и для обычных функций: пишем сигнатуры для разных вариантов вызова сверху, а всю логику реализуем в одном универсальном конструкторе снизу.
class Video {
name: string = '';
length: number = 0;
// Сигнатуры перегрузок
constructor(name: string)
constructor(name: string, description: string, length: number)
// Тело конструктора (реализация)
constructor(name: string, description?: string, length?: number) {
this.name = name;
this.length = length || 60;
}
}
// Так можно:
new Video('js');
new Video('js', 'описание', 10);
// А вот так TS не даст сделать, так как сценарий не описан:
// new Video('js', 'описание');
export {}Очень удобная штука для строгой типизации, когда класс может создаваться с разным набором аргументов.