在抽象基类静态函数中传递自我引用作为参数,供子类使用。

问题描述 投票:0回答:1

在typescript中,我们可以创建一个基类,这个基类有一个静态函数,子类可以使用这个函数,并且这个函数可以返回调用子类的任何类型。这里显示的是 TypeScript:继承类中静态方法的自引用返回类型。.

type Constructor<T> = { new (): T }

class BaseModel {
  static getAll<T>(this: Constructor<T>): T[] {
    return [] // dummy impl
  }

  /**
   * Example of static method with an argument:
   */
  static getById<T>(this: Constructor<T>, id: number): T {
    return // dummy impl
  }
}

class SubModel extends BaseModel {}
const savedSubs: SubModel = SubModel.getById(1234)

如何创建一个函数,接受子类类型的输入参数?

从伪代码的角度看,它应该是这样的。

static getByChild<T>(this: Constructor<T>, child: this): T {
  return // dummy impl
}

但这是行不通的 我怎么能让方法参数是这个基类的子类呢?

typescript inheritance static
1个回答
0
投票

如果是 T 是为了成为子类的实例类型,这一点从 thisConstructor<T>,那么你只需要使用 T 如同 child 参数。

static getByChild<T>(this: Constructor<T>, child: T): T {
  return child; // ?
}

你可以验证这个工作。

const oneSub = SubModel.getById(123); // SubModel
const anotherSub = SubModel.getByChild(oneSub); // SubModel

希望能帮到你,祝你好运!

游乐场链接到代码

© www.soinside.com 2019 - 2024. All rights reserved.