我不得不根据请求将很多基于数字的枚举更改为字符串枚举,现在我需要为存储 API 中已经存储的enum
值制作一个enum
转换器,所以我有:
enum MyEnum {
FirstValue,
SecondValue
}
现在是
enum MyEnum {
FirstValue = "FirstValue",
SecondValue = "SecondValue"
}
并恢复一些存储的对象,例如
myObject = {
myEnum = 0
}
我必须恢复它并再次存储为:
myObject = {
myEnum = 'FirstValue'
}
至于现在我已经有了它的逻辑,但我的函数定义有问题,我不知道如何在不向所有枚举添加索引签名的情况下定义"任何字符串枚举"。
我尝试使用带有索引签名的接口
interface EnumToFix {
[key: string]: string;
}
但是如果我把它交给我的函数,我会得到错误:
类型为"类型MyEnum"的参数不可分配给类型为"EnumToFix"的参数。 类型"MyEnum"中缺少索引签名。
我目前的函数定义是
private async fixGeneral<T>(storageKey: StorageKeyItems, enumToFix: EnumToFix, objectKeyToFix: keyof T): Promise<void>
如果我忽略错误@ts-ignore
它会按预期工作。
有时,当您更好地了解对象时,只需将对象转换为未知对象,然后在目标类型中投射即可。但是您需要在"fixGeneral"函数中提供逻辑,以正确转换myObject。所以你可以做这样的事情:
enum MyEnum {
FirstValue = "FirstValue",
SecondValue = "SecondValue"
}
let myObject: { myEnum: string | number } = { myEnum: 0 };
for (const propName of Object.keys(myObject))
if (typeof myObject[propName] === "number")
myObject[propName] = MyEnum[myObject[propName]];
let myObjectTyped = myObject as unknown as { myEnum: MyEnum };
当你的意思不同时,我会问你更多细节/代码。 :)