TypeScript 中的类型化枚举实例
Posted
技术标签:
【中文标题】TypeScript 中的类型化枚举实例【英文标题】:Typed enum instance in TypeScript 【发布时间】:2017-08-19 22:23:28 【问题描述】:我有以下方法将枚举的字符串实例转换为对象上相应的枚举成员:
function transformEnum<TBase>(base: TBase, member: keyof TBase, enumInstance: any)
base[member] = enumInstance[base[member]];
它是这样称呼的:
transformEnum(result, "day", DayOfWeek);
有没有办法输入enumInstance
变量?打字不一定是完美的,但至少在某种程度上限制它会很好。
我也试过了
function transform<T>(get: () => T, set: (x: T) => void, enumInstance: T)
set((enumInstance as any)[get()]);
但是当我这样称呼它时:
transform<DayOfWeek>(() => result.day, (x) => result.day = x; , DayOfWeek);
我明白了
[ts]“typeof DayOfWeek”类型的参数不可分配给“DayOfWeek”类型的参数。
【问题讨论】:
请检查这是否适合您:***.com/questions/17380845/… @BalajiV 如果您阅读我的代码示例,您会发现这就是我正在做的事情。问题不是如何进行转换,而是如何键入函数参数。 【参考方案1】:function transform<T, TKey extends keyof T>(get: () => TKey, set: (x: T[TKey]) => void, enumInstance: T)
set(enumInstance[get()]);
例子:
enum DayOfWeek
Monday, Tuesday, Wednesday, ...
type DayOfWeekKey = keyof typeof DayOfWeek;
class ClassWithDay
day: DayOfWeekKey | DayOfWeek;
let c = new ClassWithDay();
c.day = "Monday";
transform(() => c.day as DayOfWeekKey, v => c.day = v;, DayOfWeek);
// c.day is now 0
【讨论】:
以上是关于TypeScript 中的类型化枚举实例的主要内容,如果未能解决你的问题,请参考以下文章