ts如何获取构造函数参数的类型

class Base {
  public foo :number[] | null
  // 问题1
  // 当然这句是报错的 我相信你也明白我的意思
  // construct(public foo:number[] | null) 不算
  constructor(foo:typeof this.foo){
    this.foo = foo
  }
}
class Sub extends Base {
  // 问题2
  // 当定义bar的类型时 我必须得手动去复制Base构造函数的foo参数的类型(number[] | null) 然后黏贴过来 非常麻烦
  // 有没有类似 typeof 的语句可以获取 父类构造函数的参数类型
  constructor(bar:number[] | null){
    super(bar);
  }
}
阅读 10.4k
3 个回答
class Base {
  constructor(public foo: number[] | null){

  }
}

class Sub extends Base {
  constructor(bar: ConstructorParameters<typeof Base>[0]){
    super(bar);
  }
}

这样试试

typeof 并非 TypeScript 的东西,它是本身就是 JavaScript 的一个操作符,其参数只支持一个对象或原始值两种。

事实上,如果你想偷懒,或者只能修改一处类型定义,可以使用 type,例如:

export type FooType = number[] | null;
class Base {
  constructor(public foo :number[] | null){
  }
}

另外,number[] | null 又不是什么很麻烦的东西,重复也无所谓。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题