我已经做了一个返回字符串的API调用,例如“clear”。我已经做了一个枚举SkyEnuments来匹配这个字符串:
export enum SkyGradients {
Overcast = "linear-gradient(135deg, #808080, #404040)",
Clear = "linear-gradient(135deg, #C0C0C0, #808080)",
}
字符串
关于SkyColors:
export enum SkyColors {
Overcast = "rgb(128, 128, 128)",
Clear = "rgb(192, 192, 192)",
}
型
现在我想做的是使用字符串“Clear”获取相应的颜色和渐变
我试过这个:
export function getGradients(text: string): string | undefined {
for (const gradient in Gradients) {
if (Gradients[gradient] === text) {
return gradient;
}
}
}
型
但我得到了这个错误:
'Gradients' only refers to a type, but is being used a value here.
型
以及:
Element implicitly has an 'any' type because of type 'string' can't be used to index type 'typeof Gradients'. No index signature with a parameter of type 'string' was found on type 'typeof Gradients'
型
我理解错误,但不知道如何修复
1条答案
按热度按时间gkn4icbw1#
除非您确实需要枚举模式,否则更好的解决方案似乎是
字符串
那么要获取这个值,
型
TSPlayground示例
参见下面的其他解决方案。
既然在键不存在的情况下返回undefined是可以接受的,那么就可以安全地将枚举强制转换为
any
。型
TSPlayground示例
尽管如果您向枚举中添加了非字符串的值,则会导致运行时错误。
如果你声明对象而不是枚举,你可以获得更健壮的类型安全(枚举只是编译成对象)。你可以对对象进行类型转换,仍然推断对象的类型,但也允许使用任意字符串进行索引。你甚至可以创建一个类型来充当枚举类型。
这就消除了对getter函数的需要,同时保持了严格的类型安全和与枚举相同的功能。
型
示例用法:
型
TSPlayground示例