gpt4 book ai didi

typescript - TypeScript 中的类型化枚举实例

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:46 30 4
gpt4 key购买 nike

我有以下方法将枚举的字符串实例转换为对象上相应的枚举成员:

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] Argument of type 'typeof DayOfWeek' is not assignable to parameter of type 'DayOfWeek'.

最佳答案

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 - TypeScript 中的类型化枚举实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042549/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com