gpt4 book ai didi

arrays - 为扩展 Array 的自定义二维数组类覆盖 Typescript 中的 Array.of()

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:11 24 4
gpt4 key购买 nike

我正在尝试扩展 Array 并制作一个 Array2D 类。我希望构造函数接受任意数量的参数,但这些参数应该是 T 类型的数组。这是我目前所拥有的:

class Array2D<T> extends Array<T[]> {
constructor(...args: T[][]) {
super(...args)
}

static of(...args: T[][]) {
return new Array2D(...args)
}
}

Typescript 显示此错误:

Types of property 'of' are incompatible.
Type '<T>(...args: T[][]) => Array2D<T>' is not assignable to type '<T>(...items: T[]) => T[]'.
Types of parameters 'args' and 'items' are incompatible.
Type 'T' is not assignable to type 'T[]'.

有人可以解释 Tyspecript 提示什么以及如何解决这个问题。

最佳答案

这是另一种打字解决方法。让我们将 Array 构造函数的类型扩展为没有已知静态方法的类型:

const VanillaArrayConstructor: new <T>(...args: T[]) => Array<T>
= Array;

您可以使用 VanillaArrayConstructor 构造数组,但是如果您尝试调用 .from().of() 编译器会报错> 或任何其他静态方法。然后你可以扩展 that 而不是 Array:

class Array2D<T> extends VanillaArrayConstructor<T[]> {
constructor(...args: T[][]) {
super(...args)
}

static of<T>(...args: T[][]) {
return new Array2D(...args)
}
}

这对 Array2D 在运行时的实际行为没有影响,但现在的类型使得编译器不期望 Array2D 构造函数的类型扩展Array 构造函数的类型。

希望对您有所帮助。祝你好运!

Link to code

关于arrays - 为扩展 Array 的自定义二维数组类覆盖 Typescript 中的 Array.of(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56398804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com