【发布时间】:2018-10-31 07:09:31
【问题描述】:
我有安静的服务接受枚举值作为数字或字符串,但总是只返回数字。有没有办法输入它们?
这是我想要的,但它在语法上无效:
enum Features {
"A" = 1,
"B" = 2,
"C" = 2
}
type EnumOrString<T> = T extends enum
? T | keyof T
: T
declare function getData(featureFilter: EnumOrString<Features>[]): Features[]
getData 接受枚举值或枚举键的数组,但只返回枚举值。
I also would want to extend this to mapped types like DeepPartial 以便任何嵌套的枚举都得到这种处理 - 不必具有由请求和响应分区的单独的类型层次结构。
【问题讨论】:
-
我认为您无法以编程方式识别
enum。我得到的最接近的是type IsEnum<T> = T extends Record<keyof T, string | number> ? true : false,但无论如何你都需要EnumOrString<typeof Features>。 -
等等,所以你想要一些采用数据结构并递归地将
Features更改为Features | keyof typeof Features的东西? -
好吧,any 枚举类型的成员(递归) - 但并非所有成员都会被枚举类型
-
这个问题有两个部分,然后......一个是“识别枚举”,我认为你做不到。另一种是“用枚举值和枚举对象的键的联合递归替换枚举类型”,如果您事先知道您关心哪些枚举(例如,@ 987654331@).
标签: typescript enums mapped-types conditional-types