Ondra Žižka Ondra Žižka - 1 year ago 177
TypeScript Question

TypeScript - storing a class as a map value?

I have few classes.

classes extend

How can I create a map from
to subclasses of

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,

This ends up with an error:

DiscriminatorMappingData.ts(8,5): error TS2322: Type '{ [x: string]: typeof "...' is not assignable to type '{ [key: string]: typeof "...'.

Index signatures are incompatible.

Type 'typeof "...models/T...' is not assignable to type 'typeof ".../FrameModel"'.

Property 'FrameModel' is missing in type 'typeof ".../models/T...'.

I assume this can be done with generics but I'm not sure how.

Answer Source

(With reference to the comment, here is the solution to the problem.)

The problem seems to be with the import statement and curly brackets should be included while importing class. e.g. import {FrameModel}...

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download