【发布时间】:2016-10-28 00:56:13
【问题描述】:
我有一个处理类的 TypeScript 代码(OGM 框架)。
模型/实体有一个基类,例如BaseModel。
但是,我想支持几个不同的基本模型类,例如ProxiedBaseModel 和 DecoratedBaseModel。
问题是:
export abstract class DiscriminatorMapping<BaseModelT>
{
public static getMapping() :
{ [key: string]: typeof BaseModelT }
{ ... }
这是一个简单的类字典。
它需要string 类的映射。
而typeof BaseModelT 显然不起作用,因为 TypeScript 不知道会输入什么类型。
我应该如何表达类类型参数接受的是类的东西?
我已经知道如何表示任何类的类型,即{ new (): <any> }。但我不知道如何在这里应用它:
class DiscriminatorMapping<BaseModelT extends { new (): <any> }>
也许我应该介绍一些类型别名?
更新:我试过了
export abstract class DiscriminatorMapping<BaseModelClassT>
{
public static getMapping() : { [key: string]: BaseModelClassT } { return {}; }
(使用BaseModelClassT 表示它是一个类类型(“Class<T>”),而不是模型类型本身。)
但这是无效的:
静态成员不能引用类类型参数。
我需要它是静态的,因为生成的数据如何通过子类的同名静态字段进入静态字段的机制。
所以目前我通过使用相同的 2 个类来解决它,仅在导入方面有所不同:
import {BaseFrameModel as BaseModel} from './BaseFrameModel';
// vs.
import {BaseModel} from './BaseModel';
【问题讨论】:
标签: class generics typescript reflection