Я столкнулся с небольшой проблемой при работе с перечислениями в 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.