繁体   English   中英

TypeScript可以定义这个类型吗?

[英]Is it possible to define this type in TypeScript?

我正在创建一个 TypeScript 应用程序。 我的想法是将一种功能传递给我的应用程序。 每个功能都是 class,但尚未实例化。 在我的应用程序中还有一个特殊的方法“init”,我想在其中传递真实的特征对象。

这个怎么定义?

如果我像这样定义泛型类型:

Application<F extends Record<string, Feature>>

然后 TS 要我将实例传递给我的类型。 我如何定义这种类型是类的记录,然后我将能够创建一个新类型来反映原始类型的结构但具有实例?

要传入 class,您需要传入 class 的构造函数。您可以使用构造函数签名来执行此操作(类似于 function 签名,只是在其前面加上关键字new


class Application<F extends Record<string, new () => Feature>> {
  
  constructor(feautures: F) {
    for(let key in feautures) {
      let f= new feautures[key]();
      f.init()
    }
  }
}


new Application({
  FeatureA,
  FeatureB
})

游乐场链接

或者,如果您想更轻松地访问实例类型,您还可以使用:


class Application<F extends Record<string, Feature>> {
  featureInstances: F;  
  constructor(feautures: { [P in keyof F]: new () => F[P] }) {
    this.featureInstances = {} as F
    for(let key in feautures) {
      let f= new feautures[key]();
      f.init()
      this.featureInstances[key] = f
    }
  }
}

let app = new Application({
  FeatureA,
  FeatureB
})
app.featureInstances.FeatureA.methodA();
app.featureInstances.FeatureB.methodB();

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM