0
我想定義一個函數,根據我給出的鍵值返回不同類型的對象。這基本上就像在createElement
功能在TypeScript接口中使用字符串枚舉值作爲計算屬性鍵
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()
}
}
然而,打字稿似乎不喜歡我把裏面的接口enum Kind
的值作爲計算財產的方式,它抱怨
A computed property name in an interface must directly refer to a built-in symbol.
這裏談到的問題,我已經有了在枚舉中定義的常量,我不喜歡使用字符串字面量,有沒有一種方法可以使這個工作?這意味着使用Kind枚舉的值作爲KindMap
中的計算屬性鍵。
[這是不支持](https://github.com/Microsoft/TypeScript/issues/16258)在當前版本的打字稿,看起來像[它可能會在2.7中修復](https://github.com/Microsoft/TypeScript/pull/15473) – artem