Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在TypeScript中,是否可以声明属性名称都属于某个枚举的对象?_Typescript - Fatal编程技术网

在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(),
}