【发布时间】:2019-03-10 17:42:46
【问题描述】:
在 TypeScript 中使用枚举时遇到了一个小问题。我的情况是这样的:
- 我已经定义了一个包含允许值的字符串枚举
- 我定义了一个接受任何传入值(
string类型)的方法,并且必须将其强制转换为所述枚举
问题是,即使在检查了方法传入的value 之后,intellisense 告诉我value 仍然是string 的类型而不是枚举。如何强制 value 成为 AllowedValues 的类型?
这是一个概念验证示例:
/** enum */
enum AllowedValues {
LOREM_IPSUM = 'lorem ipsum',
DOLOR_SIT = 'dolor sir',
AMET = 'amet'
}
/** @method */
function doSomething(value: string = AllowedValues.LOREM_IPSUM) {
// If value is not found in enum, force it to a default
if (!(Object as any).values(AllowedValues).includes(value))
value = AllowedValues.LOREM_IPSUM;
// Value should be of type `AllowedValues` here
// But TypeScript/Intellisense still thinks it is `string`
console.log(value);
}
doSomething('amet'); // Should log `amet`
doSomething('aloha'); // Should log `lorem ipsum`, since it is not found in `AllowedValues`
您也可以在 TypeScript playground 上找到它。
【问题讨论】:
-
const av = Object.keys(AllowedValues).find(k => AllowedValues[k] === 'dolor sir') 作为 AllowedValues; console.log(av);
标签: typescript intellisense ecmascript-2017