typescript 类型脚本,以更简洁的方式定位泛型类方法

bihw5rsg  于 2022-12-24  发布在  TypeScript
关注(0)|答案(1)|浏览(134)

让我们看一下下面的代码:

export class BaseClass<T> {
  property = this.buildProperty();

  buildProperty(){
    return someBuilder<T>();
  }
}

TS将使用返回的buildProperty()类型神奇地推断出property的类型
现在,对于更清晰的代码,我希望在构造函数中构建属性,我将代码重构如下:

export class BaseClass<T> {
  property: ReturnType<BaseClass<T>['buildProperty']>;

  constructor(){
    this.property = this.buildProperty();
  }

  buildProperty(){
    return someBuilder<T>();
  }
}

这是正确的,但是我不满意重复当前类类型两次,即BaseClass<T>
然后我想知道是否可以使用this来简化这一行。我尝试将属性的类型重写为如下所示,但没有成功:

property: ReturnType<this['buildProperty']>;

有没有更干净的方式来实现它?

tf7tbtn2

tf7tbtn21#

可以简单地使用ReturnType<typeof this.buildProperty>

// silly function returning a different type then T (here just T | string for the example)
function someBuilder<T>(): T | string{
  return {} as unknown as T | string;
}

export class BaseClass<T> {
  property: ReturnType<typeof this.buildProperty>;

  constructor(){
    this.property = this.buildProperty();
  }

  buildProperty(){
    return someBuilder<T>();
  }
}

const test = new BaseClass<number>();
test.property // is number | string

相关问题