我希望定义一个函数,根据给定的键返回不同类型的对象。这基本上就像在
然而,TypeScript似乎不喜欢我将
这里出现了问题,我已经在枚举中定义了常量,但是我不想使用字符串字面量,有没有办法让这个工作起来?也就是说,可以使用 Kind 枚举的值作为计算属性键值在 KindMap 中工作。
createElement
函数中使用的技巧。
https://github.com/Microsoft/TypeScript/blob/master/lib/lib.dom.d.ts#L3117
然而,我不想使用字符串字面量,而是想使用字符串枚举类型。因此我编写了类似以下的代码:
class Dog {}
class Cat {}
class Bird {}
enum Kind {
Dog = 'Dog',
Cat = 'Cat',
Bird = 'Bird'
}
interface KindMap {
[Kind.Dog]: Dog
[Kind.Cat]: Cat
[Kind.Bird]: Bird
}
function getAnimal<K extends keyof KindMap> (key: K): KindMap[K] {
switch (key) {
case Kind.Dog:
return new Dog()
case Kind.Cat:
return new Cat()
case Kind.Bird:
return new Bird()
}
}
然而,TypeScript似乎不喜欢我将
enum Kind
的值放在接口中作为计算属性的方式,它会抱怨。A computed property name in an interface must directly refer to a built-in symbol.
这里出现了问题,我已经在枚举中定义了常量,但是我不想使用字符串字面量,有没有办法让这个工作起来?也就是说,可以使用 Kind 枚举的值作为计算属性键值在 KindMap 中工作。