HarmonyOS 鸿蒙Next:如何根据数组动态生成type或interface?
HarmonyOS 鸿蒙Next:如何根据数组动态生成type或interface?
let list = [
{
“icon_id”: “38240819”,
“name”: “back-icon”,
“font_class”: “arrow-ios-left”,
“unicode”: “e612”,
“unicode_decimal”: 58898
},
//…
]
(封装iconfont字体图标)这个是我的数组 ,我想通过代码动态生成type, type FontType = ‘back-icon’ | … 这样封装的字体图标组件就有提示了。
我想实现这种,请问如何实现?
src/main/ets/util/Page68TS.ts
export let list = [
{
"icon_id": "38240819",
"name": "back-icon",
"font_class": "arrow-ios-left",
"unicode": "e612",
"unicode_decimal": 58898
}
// ... 其他元素
];
export function generateFontType(list: any[]): string {
const names = list.map(item => item.name);
const typeName = FontType
;
const unionType = names.join(’ | ');
return type ${typeName} = ${unionType};
;
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
src/main/ets/pages/Page68.ets
import { generateFontType, list } from ‘…/util/Page68TS’;
@Entry
@Component
struct Page68 {
build() {
Column() {
Button(‘测试’).onClick(()=>{
const fontTypeDefinition = generateFontType(list);
console.log(fontTypeDefinition:${fontTypeDefinition}
);
})
}
.height(‘100%’)
.width(‘100%’)
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
打印
fontTypeDefinition:type FontType = back-icon;
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
你没听懂我的意思,你这不是通过代码生成一串字符串嘛, 我是想应用启动时,
type FontType = ‘’
(function xx(): FontType {
FontType = ‘back-icon’ | ‘xx-icon’
})()
之后在代码用FontType, 在调用组件时,就会有提示。我想应该实现不了。
我现在解决方案就是写一个脚本, 每次执行,生成字符串写入文件。
最后。 多谢!!!
可以参考下[@Extend](/user/Extend)和[@Styles](/user/Styles)装饰器
[@Styles](/user/Styles)装饰器:定义组件重用样式-基本语法-UI范式-学习ArkTS语言-入门 - 华为HarmonyOS开发者 (huawei.com)
[@Extend](/user/Extend)装饰器:定义扩展组件样式-基本语法-UI范式-学习ArkTS语言-入门 - 华为HarmonyOS开发者 (huawei.com)
在HarmonyOS或任何TypeScript/JavaScript环境中,你不能直接根据数组动态生成Type或Interface,因为TypeScript的类型定义(Type或Interface)在编译时就已经确定,而数组的内容是运行时才能确定的。
但你可以使用泛型(Generics)来定义一个能够处理任意类型数组的接口或类型,或者使用类型断言(Type Assertions)来指定数组元素的类型。对于更复杂的动态类型处理,可能需要考虑使用映射类型(Mapped Types)或条件类型(Conditional Types),但这些仍然是在编译时定义的。
如果问题依旧没法解决请加我微信,我的微信是itying888。