Вот еще один способ обхода.Давайте расширим тип конструктора Array
до чего-то без известных статических методов:
const VanillaArrayConstructor: new <T>(...args: T[]) => Array<T>
= Array;
Вы можете использовать VanillaArrayConstructor
для создания массивов, но компилятор будет жаловаться, если вы попытаетесь вызвать .from()
или .of()
или любые другие статические методы.И тогда вы можете расширить , что вместо Array
:
class Array2D<T> extends VanillaArrayConstructor<T[]> {
constructor(...args: T[][]) {
super(...args)
}
static of<T>(...args: T[][]) {
return new Array2D(...args)
}
}
Это не имеет никакого значения для фактического поведения Array2D
во время выполнения, но типизация теперь такова, чтокомпилятор не ожидает, что тип конструктора Array2D
расширяет тип конструктора Array
.
Надеюсь, это поможет.Удачи!
Ссылка на код