我有一个处理类(OGM框架)的TypeScript代码。
模型/实体有一个基类,比如BaseModel
。
但是,我想支持几种不同的基本模型类,例如ProxiedBaseModel
和DecoratedBaseModel
。
问题是:
export abstract class DiscriminatorMapping<BaseModelT>
{
public static getMapping() :
{ [key: string]: typeof BaseModelT }
{ ... }
这是一个简单的字典类
它需要string
&lt; - &gt;的地图。类。
并且typeof BaseModelT
显然不起作用,因为TypeScript无法知道将会出现什么类型。
我应该如何表达类类型参数需要一个类?
我已经知道如何表示任何类的类型,{ new (): <any> }
。但我不知道如何在这里应用它:
class DiscriminatorMapping<BaseModelT extends { new (): <any> }>
也许我应该介绍一些类型别名?
更新:我试过
export abstract class DiscriminatorMapping<BaseModelClassT>
{
public static getMapping() : { [key: string]: BaseModelClassT } { return {}; }
(使用BaseModelClassT
来表达类型(&#34; Class<T>
&#34;),而不是模型类型本身。)
但这是无效的:
静态成员无法引用类类型参数。
我需要它静态,因为生成的数据如何通过子类进入静态字段的机制。同名的静态字段。
所以目前我通过拥有相同的2个类来解决它,仅在导入方面有所不同:
import {BaseFrameModel as BaseModel} from './BaseFrameModel';
// vs.
import {BaseModel} from './BaseModel';
答案 0 :(得分:2)
您的更新代码声明了从DispatchQueue.main.async {
self.player.play()
}
到string
实例的映射,但并不是您想要的。
由于无法访问静态成员的通用约束,因此您需要将静态方法设为通用的:
BaseModelClass
您可以将export abstract class DiscriminatorMapping<BaseModelT> {
public static getMapping<BaseModelT2>(): { [key: string]: { new(): BaseModelT2 } } {
return null;
}
}
命名为相同(不含2),但我添加它以使其脱颖而出。