Class TypeScript-将类存储为映射值?

Class TypeScript-将类存储为映射值?,class,dictionary,typescript,Class,Dictionary,Typescript,我很少上课测试~类扩展FrameModel 如何创建从string到FrameModel子类的映射 import FrameModel from '../../FrameModel'; import TestShipModel from './TestGeneratorModel'; import TestGeneratorModel from './TestGeneratorModel'; import TestPlanetModel from './TestGeneratorModel';

我很少上课<代码>测试~类扩展
FrameModel

如何创建从
string
FrameModel
子类的映射

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”。
类型“../models/T…”中缺少属性“FrameModel”


我假设这可以通过泛型实现,但我不确定如何实现。

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

这段代码适用于我的。

(参考注释,这里是问题的解决方案。)


问题似乎出在
import
语句中,导入类时应包括花括号。例如
import{FrameModel}…

导入是否缺少花括号,例如import{FrameModel}从…看来这就是问题所在!您可以将其作为答案。添加为答案,请接受。谢谢。这是一个有点奇怪的“解决方案”,我不得不考虑接受哪个答案。但是感谢你注意到:)你是对的Ondra,事实上,这也是同样的原因,我首先添加了它作为一个注释:)没有什么比解决方案更好的了,只是确定语法问题。但我很高兴,如果这节省了你的时间的话。提出的另一种方法,在定义我将相关的类放在一个文件中。虽然我发现的语法错误将帮助您在文件中拆分定义(我想,您也有相同的意图)。但无论如何,您可以自由选择正确的答案和方法。
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,
    }
}