我上课很少。 Test~
个类扩展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”'。
类型'typeof'中缺少属性'FrameModel'... / models / T ...'。
我认为这可以用泛型完成,但我不确定如何。
答案 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}...