我想在类型记录中扩展Javascript类型的数组。具体来说,我想从一个常规的Uint8Array开始,然后用1(而不是普通类型化数组中的0)初始化它,并添加一些额外的方法。我希望这样做,以便常规的类型数组实例化方法不会抛出类型错误,例如new SpecialArray([1, 2, 3])
和new SpecialArray(3)
都应该像预期的那样工作。
我有这样的东西:
class SpecialArray extends Uint8Array {
constructor(arg: number | number[]) {
super(arg)
this.fill(1)
}
...
}
但是,类型记录会引发以下有关arg
的错误
No overload matches this call.
The last overload gave the following error.
Argument of type 'number | number[]' is not assignable to parameter of type 'ArrayBufferLike'.
Type 'number' is not assignable to type 'ArrayBufferLike'.ts(2769)
我发现我可以通过在对超级的调用中使用类型断言来解决这个问题:
super(arg as unknown as ArrayBufferLike)
然而,这感觉很混乱。有什么干净的方法吗?
发布于 2022-09-15 16:29:30
或者更简单地说,使用内置的ConstructorParameters
类型:
class SpecialArray extends Uint8Array {
constructor(...args: ConstructorParameters<typeof Uint8Array>) {
super(...args)
this.fill(1)
}
}
发布于 2022-09-15 16:26:32
这个错误给出了一个很好的提示。没有任何版本的Uint8Array
具有接受number | number[]
的构造函数。
试一试
class SpecialArray extends Uint8Array {
constructor(array: ArrayLike<number> | ArrayBufferLike) {
super(array);
this.fill(1)
}
}
https://stackoverflow.com/questions/73738580
复制相似问题