Class 类型脚本:类泛型-类似于Java';s级<;T扩展Foo>;
我有一个处理类的TypeScript代码(OGM框架) 模型/实体有一个基类,例如,Class 类型脚本:类泛型-类似于Java';s级<;T扩展Foo>;,class,generics,typescript,reflection,Class,Generics,Typescript,Reflection,我有一个处理类的TypeScript代码(OGM框架) 模型/实体有一个基类,例如,BaseModel。 但是,我想支持几种不同的基本模型类,例如ProxiedBaseModel和DecoratedBaseModel 问题是: export abstract class DiscriminatorMapping<BaseModelT> { public static getMapping() : { [key: string]: typeof BaseMod
BaseModel
。
但是,我想支持几种不同的基本模型类,例如ProxiedBaseModel
和DecoratedBaseModel
问题是:
export abstract class DiscriminatorMapping<BaseModelT>
{
public static getMapping() :
{ [key: string]: typeof BaseModelT }
{ ... }
也许我应该介绍一些类型别名
更新:我已经试过了
export abstract class DiscriminatorMapping<BaseModelClassT>
{
public static getMapping() : { [key: string]: BaseModelClassT } { return {}; }
更新后的代码声明了从
string
到BaseModelClass
实例的映射,这不是您想要的
由于无法从静态成员访问泛型约束,因此需要将静态方法本身设置为泛型:
export abstract class DiscriminatorMapping<BaseModelT> {
public static getMapping<BaseModelT2>(): { [key: string]: { new(): BaseModelT2 } } {
return null;
}
}
导出抽象类应用程序{
公共静态getMapping():{[key:string]:{new():BaseModelT2}{
返回null;
}
}
()
您可以将
BaseModelT2
命名为相同的名称(没有2),但我添加了它以使其突出。您更新的代码声明了一个从string
到BaseModelClass
实例的映射,这不是您想要的
由于无法从静态成员访问泛型约束,因此需要将静态方法本身设置为泛型:
export abstract class DiscriminatorMapping<BaseModelT> {
public static getMapping<BaseModelT2>(): { [key: string]: { new(): BaseModelT2 } } {
return null;
}
}
导出抽象类应用程序{
公共静态getMapping():{[key:string]:{new():BaseModelT2}{
返回null;
}
}
()
您可以将
BaseModelT2
命名为相同的名称(没有2),但我添加它是为了让它脱颖而出。BaseModelClass
不是一个类,它只是一个类型。我会像DisMap
那样使用它,更好的名称应该是TBaseModel
。在Q中更改。无论如何,要尝试,谢谢!也许正确的方法是找到其他机制,将生成的数据带到DiscriminatorMapping
。我想要一个单例,但Angular2/SystemJS加载有问题……显然BaseModelClass
是一个类型,但它表示一个类,它的实例就是这个映射的值。我很确定我发布的代码回答了你的问题不不,地图的值就是类。我正在将字符串映射到类型。在Java中,它应该是Map
。但是由于TS没有类的等价物,我需要为它使用泛型类型,并在某个地方为它提供ProxiedBaseModel的类型。我知道它们是类!但是您编写它的方式就像在java中一样:Map
,这就是我的观点。我提出的代码就是你要找的。你试过了吗?BaseModelClass
不是一个类,它只是一种类型。我会像DisMap
那样使用它,更好的名称应该是TBaseModel
。在Q中更改。无论如何,要尝试,谢谢!也许正确的方法是找到其他机制,将生成的数据带到DiscriminatorMapping
。我想要一个单例,但Angular2/SystemJS加载有问题……显然BaseModelClass
是一个类型,但它表示一个类,它的实例就是这个映射的值。我很确定我发布的代码回答了你的问题不不,地图的值就是类。我正在将字符串映射到类型。在Java中,它应该是Map
。但是由于TS没有类的等价物,我需要为它使用泛型类型,并在某个地方为它提供ProxiedBaseModel的类型。我知道它们是类!但是您编写它的方式就像在java中一样:Map
,这就是我的观点。我提出的代码就是你要找的。你试过了吗?
export abstract class DiscriminatorMapping<BaseModelT> {
public static getMapping<BaseModelT2>(): { [key: string]: { new(): BaseModelT2 } } {
return null;
}
}