我已经把这个代码在TS操场太,点击这里,希望它有帮助。
基于枚举键动态分配对象值
我有这个enum Animals
,我试图完成的是在interface iAnimals
中获取每个动物key
及其关联的接口值(如果有),如果没有,则使用interface iBaseAnimal
作为默认值,因此在这种情况下,'lion'
将获取iBaseAnimal
作为接口,但'snail'
键应获取与'parrot'
相同的iSnail
...等等。
任何帮助都将不胜感激
enum ANIMALS {
CAT = 'cat',
LION = 'lion',
PARROT = 'parrot',
SHARK = 'shark',
SNAIL = 'snail'
}
interface iBaseAnimal {
name: string,
gender: 'male' | 'female'
wild: boolean
}
interface iShark extends iBaseAnimal {
max_gills: number
}
interface iParrot extends iBaseAnimal {
wing: {
length: 120,
unit: 'cm'
}
}
// DONE Overwritting property when extending base props with Omit
interface iSnail extends Omit<iBaseAnimal, 'gender'> {
gender: 'hermaphrodite'
}
interface iAnimals {
animals: {
// DONE Enum values as key
// PENDING way to interpolate proper interface value base on the enum key
[key in ANIMALS]: iBaseAnimal
},
// PENDING way to get Enum values as union types (similar to [key in ANIMALS] but for function param)
getAnimal: (animalKey:'lion', options: any) => void
}
1条答案
按热度按时间fwzugrvs1#
这可能不是你想要的,但是一个可能的解决方案是切换你定义动物的位置,而不是在枚举中定义它们,而是在接口中定义它们:
以下是它的使用和测试方法:
在TS操场上运行这个。
这将为您提供三个方面:
IAnimalsDict
)。SAnimalNames
)。AnimalFor
)。还有一个附带的好处就是你不必使用枚举!))