Using TypeScript, is it possible to type the following Map more acurately?
export const animalsMap = new Map<AnimalIdsEnum, object>([
[
AnimalIdsEnum.sylvester,
{
id: AnimalIdsEnum.sylvester,
...new CatAnimalData("Sylvester", "Tweety");
}
],
[
AnimalIdsEnum.tweety,
{
id: AnimalIdsEnum.tweety,
...new BirdAnimalData("Tweety", "Sylvester");
},
],
]);
Where:
export class AbstractAnimalData {
name:string,
}
export class CatAnimalData extends AbstractAnimalData {
favouriteFood:string,
// NB: Leaving out the constructor for brevity
}
export class BirdAnimalData extends AbstractAnimalData {
archEnemy:string,
// NB: Leaving out the constructor for brevity
}
Basically, this map structure is very convenient to use in practice, but I am not sure if it is possible to get it typed more accurately, given that:
Note: In practice, the objects created by new CatAnimalData("Sylvester", "Tweety"); and new BirdAnimalData("Tweety", "Sylvester"); are imported from separate files. For convenience and clarity, I do not want to assign the id keys in those files, but only in the Map.