【发布时间】:2021-12-23 04:06:57
【问题描述】:
是否有一种简单/最佳实践的方法可以将 any 值转换为 TypeScript 枚举,如果没有值则抛出异常。
举个例子
您有一个明确的请求对象,并且正在使用query.option 值。您的应用程序知道它只有两个有效状态 a|b。然而,互联网和请求对象的现实是它可以是很多东西(未定义,a,b,foo)。
enum OPTIONS_ENUM {
a = 'a',
b = 'b'
}
function handleRequest(req: Request): OPTIONS_ENUM {
// This will error because query.option is an any
return OPTIONS_ENUM[req.query?.option]
}
我一直在做的事情似乎有点冗长。我在每个枚举旁边都有一个“cast”函数,如果 ENUM 没有值,则会抛出该函数。
function castToOptionsEnum(option: any): OPTIONS_ENUM {
if (!Object.values(OPTIONS_ENUM)?.includes(option)) {
throw new Error(`Invalid Value for option, must be one of ${Object.values(OPTIONS_ENUM)}`)
}
// @ts-ignore
return OPTIONS_ENUM[option]
}
function handleRequest(req: Request) {
// This will error because the option query is unknowable
return castToOptionsEnum(req.query?.option)
}
【问题讨论】:
标签: javascript typescript express