首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在类型记录中扩展类型化数组类

在类型记录中扩展类型化数组类
EN

Stack Overflow用户
提问于 2022-09-16 00:14:45
回答 2查看 44关注 0票数 1

我想在类型记录中扩展Javascript类型的数组。具体来说,我想从一个常规的Uint8Array开始,然后用1(而不是普通类型化数组中的0)初始化它,并添加一些额外的方法。我希望这样做,以便常规的类型数组实例化方法不会抛出类型错误,例如new SpecialArray([1, 2, 3])new SpecialArray(3)都应该像预期的那样工作。

我有这样的东西:

代码语言:javascript
代码运行次数:0
运行
复制
class SpecialArray extends Uint8Array {

   constructor(arg: number | number[]) {
      super(arg)
      this.fill(1)
   }
   
   ...

}

但是,类型记录会引发以下有关arg的错误

代码语言:javascript
代码运行次数:0
运行
复制
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)

我发现我可以通过在对超级的调用中使用类型断言来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
复制
super(arg as unknown as ArrayBufferLike)

然而,这感觉很混乱。有什么干净的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2022-09-16 00:29:30

或者更简单地说,使用内置的ConstructorParameters类型:

代码语言:javascript
代码运行次数:0
运行
复制
class SpecialArray extends Uint8Array {
   constructor(...args: ConstructorParameters<typeof Uint8Array>) {
      super(...args)
      this.fill(1)
   }
}

游乐场

票数 3
EN

Stack Overflow用户

发布于 2022-09-16 00:26:32

这个错误给出了一个很好的提示。没有任何版本的Uint8Array具有接受number | number[]的构造函数。

试一试

代码语言:javascript
代码运行次数:0
运行
复制
class SpecialArray extends Uint8Array {
  constructor(array: ArrayLike<number> | ArrayBufferLike) {
    super(array);
    this.fill(1)
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73738580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档