HarmonyOS 将枚举转成对象,使用keyof会报错,怎么修改?

怎么修复不会报错,代码如下:

enum Color { 
  Red = 1, 
  Green = 2, 
  Blue = 3, 
} 
 
function enumToObject<T extends Record<string, string | number>>(e: T): Record<keyof T, T[keyof T]> { 
  const obj = {} as Record<keyof T, T[keyof T]>; 
  for (const key in e) { 
    if (typeof e[key] === "number") { 
      obj[key] = e[key]; 
    } 
  } 
  return obj; 
} 
 
const colorObj = enumToObject(Color); 
console.log(colorObj);
HarmonyOS
2024-09-02 10:03:35
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

根据您的代码,我们推测您希望达成的效果是将enum类型转换成一个object,并且object本身拥有enum对应key和value。

由于ArkUI中并不支持 for...in... ,我们需要将key从入参 e 中提取出来,然后检验是否为正确枚举key:

enum Color { 
  Red = 1, 
  Green = 2, 
  Blue = 3, 
} 
 
function enumToObject<T extends Record<string, string | number>>(e: T): Record<keyof T, string | number> { 
  const obj = {} as Record<keyof T, string | number>; 
  let keyList = Object.keys(e) 
  for (let i = 0; i < keyList.length; i++) { 
    const key: keyof T = keyList[i]; 
    if (Number.isNaN(Number(key))) { 
      obj[key] = e[key] 
    } 
  } 
  return obj; 
} 
const colorObj = enumToObject(Color); 
let res = colorObj.Red.toString() 
console.log(res);

此方法只对枚举值为number的枚举类型有效。

分享
微博
QQ
微信
回复
2024-09-02 16:15:04
相关问题
HarmonyOS HasMap 如何转成对象
228浏览 • 1回复 待解决
如何Resource资源对象转成string类型
3135浏览 • 1回复 待解决
Color.Black如何转成对应的颜色编码
2104浏览 • 1回复 待解决
如何js传的map转成c++的对象
748浏览 • 1回复 待解决
Checkstyle插件使用中为什么会报错
8376浏览 • 1回复 已解决
HarmonyOS 如何把对象转成HasMap
750浏览 • 2回复 待解决
如何ArrayBuffer转成string
2544浏览 • 1回复 待解决
如何ArrayBuffer转成string?
606浏览 • 1回复 待解决
在 string 转成ArrayBuffer报错
1018浏览 • 1回复 待解决
mysqldump导出oceanbase的表会报错
4696浏览 • 1回复 待解决
修改ForEach使用的数据对象,UI不刷新
1824浏览 • 1回复 待解决
HarmonyOS Tabs BarMode枚举问题
293浏览 • 1回复 待解决