TypeScript - 将类存储为映射值?

时间:2016-08-02 08:48:24

标签: class dictionary typescript

我上课很少。 Test~个类扩展FrameModel

如何创建从stringFrameModel的子类的地图?

import FrameModel from '../../FrameModel';
import TestShipModel from './TestGeneratorModel';
import TestGeneratorModel from './TestGeneratorModel';
import TestPlanetModel from './TestGeneratorModel';

export class DiscriminatorMappingData
{
    static mapping: { [key: string]: typeof FrameModel } = {
        "TestShip": TestShipModel,
        "TestGenerator": TestGeneratorModel,
        "TestPlanet": TestPlanetModel,
    }
}

最终出现错误:

DiscriminatorMappingData.ts(8,5):错误TS2322:类型'{[x:string]:typeof“...'不能分配给'{[key:string]:typeof”......'。
  索引签名不兼容     键入'typeof“... models / T ...'不能分配给'typeof'... / FrameModel”'。
      类型'typeof'中缺少属性'FrameModel'... / models / T ...'。

我认为这可以用泛型完成,但我不确定如何。

2 个答案:

答案 0 :(得分:2)

您可以使用基类类型(FrameModel)声明哈希表,并使用后代类型作为实际值(为简单起见,我省略了模块):

class FrameModel {
}

class TestShipModel extends FrameModel {
}
class TestGeneratorModel extends FrameModel {
}
class TestPlanetModel extends FrameModel {
}

export class DiscriminatorMappingData
{
    static mapping: { [key: string]: typeof FrameModel } = {
        "TestShip": TestShipModel,
        "TestGenerator": TestGeneratorModel,
        "TestPlanet": TestPlanetModel,
    }
}

此代码适用于Typescript playground

答案 1 :(得分:1)

(参考评论,这是解决问题的方法。)

问题似乎是import语句,导入类时应包含大括号。例如import {FrameModel}...