我不得不将每个请求的很多基于枚举的枚举更改为字符串枚举,现在我需要为存储API中已经存储的enum
值创建一个enum
转换器,所以我必须:
enum MyEnum {
FirstValue,
SecondValue
}
现在是
enum MyEnum {
FirstValue = "FirstValue",
SecondValue = "SecondValue"
}
并恢复一些存储的对象,如
myObject = {
myEnum = 0
}
我必须将其恢复并再次存储为:
myObject = {
myEnum = 'FirstValue'
}
就目前而言,我已经有了逻辑,但是我的函数定义存在问题,我不知道如何定义“任何字符串枚举” 而不向我的所有对象添加索引签名枚举。
我试图使用带有索引签名的接口
interface EnumToFix {
[key: string]: string;
}
但是如果我将其提供给函数,则会出现错误:
'typeof MyEnum'类型的参数不能分配给'EnumToFix'类型的参数。 “ typeof MyEnum”类型缺少索引签名。
我当前的函数定义是
private async fixGeneral<T>(storageKey: StorageKeyItems, enumToFix: EnumToFix, objectKeyToFix: keyof T): Promise<void>
如果我忽略@ts-ignore
的错误,它将按预期工作。
答案 0 :(得分:0)
有时候,可以将对象转换为未知对象,然后再按目标类型,当您知道更好时,就可以了。但是您需要在“ 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 };
如果您的意思有所不同,我会请您提供更多详细信息/代码。 :)