TypeScript - сохранение класса в качестве значения карты?
У меня мало занятий. 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".
Свойство FrameModel отсутствует в типе typeof ".../models/T...".
Я предполагаю, что это можно сделать с помощью дженериков, но я не уверен, как это сделать.
2 ответа
(Со ссылкой на комментарий, вот решение проблемы.)
Проблема, кажется, с import
оператор и фигурные скобки должны быть включены при импорте класса. например import {FrameModel}...
Вы можете объявить хеш-таблицу с типом базового класса (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.