Как правильно определить конструктор для дочернего класса Date (машинописный текст 4.1.3)?
Определение конструктора объекта Date следующее:
new(): Date;
new(value: number | string): Date;
new(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date;
в моем коде я пытаюсь указать это:
class MyDate extends Date {
// overloads copied from DateConstructor
constructor();
constructor(value: number | string);
constructor(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number);
// constructor impl
constructor(
yearOrValue?: number | string, month?: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number
) {
super(yearOrValue, month, date, hours, minutes, seconds, ms);
/* ^^^^^^^^^^^
Argument of type 'string | number | undefined' is not assignable to parameter of type 'number'.
Type 'undefined' is not assignable to type 'number'.(2345)
*/
}
}
но это вызывает ошибку компиляции в супервызове:
Argument of type 'string | number | undefined' is not assignable to parameter of type 'number'.
Type 'undefined' is not assignable to type 'number'.(2345)
Как я могу определить параметры конструктора, чтобы я мог вызвать super со всеми возможностями, которые есть у исходного объекта Date, и сохранить безопасность типов (насколько это возможно)?
Примечания:
- Вот ссылка на пример игровой площадки с машинописным текстом
- Это всего лишь тестовый код, в производственной версии у меня больше кода в конструкторе
- Мне нужно решение, которое работает с классом (т.е. без проблем с прототипом и т. Д.)
@ts-ignore constructor(...args) { super(...args) }
. - person Bergi   schedule 19.01.2021