我想定义一个函数根据我给出的键返回不同类型的对象。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()
}
}
Run Code Online (Sandbox Code Playgroud)
然而,TypeScript 似乎不喜欢我将enum Kind's 值放在接口内作为计算属性的方式,它抱怨
A computed property name in an interface must …Run Code Online (Sandbox Code Playgroud)