在TypeScript中,是否可以声明属性名称都属于某个枚举的对象?
我有一个枚举:在TypeScript中,是否可以声明属性名称都属于某个枚举的对象?,typescript,Typescript,我有一个枚举: export enum AnimalTypes { MONKEY = 'MONKEY', HORSE = 'HORSE' DOG = 'DOG' } 现在我想使用一个对象作为hashmap,将这些枚举类型映射到某些值: const animalMapper = { [AnimalTypes.MONKEY] = new Monkey(); [AnimalTypes.HORSE] = new Horse(); [AnimalTypes.DOG] = new
export enum AnimalTypes {
MONKEY = 'MONKEY',
HORSE = 'HORSE'
DOG = 'DOG'
}
现在我想使用一个对象作为hashmap,将这些枚举类型映射到某些值:
const animalMapper = {
[AnimalTypes.MONKEY] = new Monkey();
[AnimalTypes.HORSE] = new Horse();
[AnimalTypes.DOG] = new Dog();
}
(猴子、马和狗都是动物超类的子类)
但是,我希望animalMapper是某种类型的接口。如果所有属性名都等于给定枚举的属性名,那么对象的类型是什么?比如:
export interface AnimalMapper = {
[AnimalTypes]: Animal
}
使用类似于内置实用程序类型的:
type AnimalMapper = Record<AnimalTypes, Animal>;
虽然这些都是错误:
const badAnimalMapper: AnimalMapper = {
[AnimalTypes.MONKEY]: new Monkey(),
[AnimalTypes.HORSE]: new Horse(),
[AnimalTypes.DOG]: new Dog(),
"wombat": new Animal() // error, wombat is an extra property
}
const alsoBadAnimalMapper: AnimalMapper = { // error, missing HORSE
[AnimalTypes.MONKEY]: new Monkey(),
[AnimalTypes.HORSE]: new Horse(),
}
好吧,希望这会有帮助;祝你好运
const badAnimalMapper: AnimalMapper = {
[AnimalTypes.MONKEY]: new Monkey(),
[AnimalTypes.HORSE]: new Horse(),
[AnimalTypes.DOG]: new Dog(),
"wombat": new Animal() // error, wombat is an extra property
}
const alsoBadAnimalMapper: AnimalMapper = { // error, missing HORSE
[AnimalTypes.MONKEY]: new Monkey(),
[AnimalTypes.HORSE]: new Horse(),
}