是否可以在TypeScript中定义此类型?

是否可以在TypeScript中定义此类型?,typescript,Typescript,我正在创建一个TypeScript应用程序。 我的想法是向我的应用程序传递一种功能。 每个特性都是一个类,但尚未实例化。 在我的应用程序中还有一个特殊的方法“init”,我想在这里传递真实的特征对象 如何定义这一点 如果我将泛型类型定义为: Application<F extends Record<string, Feature>> 应用程序 然后TS希望我将实例传递给我的类型。 我如何定义该类型是类的记录,之后我将能够创建一个新类型,该类型将反映原始类型的结构,但带

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

如何定义这一点

如果我将泛型类型定义为:

Application<F extends Record<string, Feature>>
应用程序
然后TS希望我将实例传递给我的类型。
我如何定义该类型是类的记录,之后我将能够创建一个新类型,该类型将反映原始类型的结构,但带有实例?

要传入一个类,需要传入该类的构造函数。您可以使用构造函数签名(类似于函数签名,只是前面有关键字
new


班级申请>{
建造师(注意事项:F){
for(让我们输入注意事项){
设f=新的feautures[key]();
f、 init()
}
}
}
新应用({
FeatureA,
特点b
})

或者,如果希望更轻松地访问实例类型,也可以使用:


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();

班级申请{
特征实例:F;
构造函数(注意:{[P in keyof F]:new()=>F[P]}){
this.featureInstances={}作为F
for(让我们输入注意事项){
设f=新的feautures[key]();
f、 init()
this.featureInstances[key]=f
}
}
}
let app=新应用程序({
FeatureA,
特点b
})
app.featureInstances.featureUrea.methodA();
app.featureInstances.FeatureB.methodB();

要传入类,需要传入该类的构造函数。您可以使用构造函数签名(类似于函数签名,只是前面有关键字
new


班级申请>{
建造师(注意事项:F){
for(让我们输入注意事项){
设f=新的feautures[key]();
f、 init()
}
}
}
新应用({
FeatureA,
特点b
})

或者,如果希望更轻松地访问实例类型,也可以使用:


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();

班级申请{
特征实例:F;
构造函数(注意:{[P in keyof F]:new()=>F[P]}){
this.featureInstances={}作为F
for(让我们输入注意事项){
设f=新的feautures[key]();
f、 init()
this.featureInstances[key]=f
}
}
}
let app=新应用程序({
FeatureA,
特点b
})
app.featureInstances.featureUrea.methodA();
app.featureInstances.FeatureB.methodB();

你好!谢谢你的回复。是否可以在独立方法中传递功能?问题是我有循环依赖关系,因为导入应用程序时应用程序未初始化。您好!谢谢你的回复。是否可以在独立方法中传递功能?问题是我有循环依赖关系,因为导入应用程序时应用程序未初始化。