HarmonyOS鸿蒙Next中如何在类中默认添加属性且有值,但是又不用初始化它
HarmonyOS鸿蒙Next中如何在类中默认添加属性且有值,但是又不用初始化它
class UserInfo {
name: string = ''
age: number = 0
isOk?: boolean = false
}
@Entry
@Component
struct Index {
@State message: UserInfo[] = []
aboutToAppear(): void {
// 这里模拟接口过来的数据
this.message = [
{ "name": "张三", "age": 25 },
{ "name": "李四", "age": 30 }
]
// 如果类型上自己加的属性是可选的默认是会有添加这个属性
console.info(JSON.stringify(this.message))
// 这里循环加上了这个属性,但是如果数据大就不太适合
for (let i = 0; i < this.message.length; i++) {
this.message[i].isOk = false
}
console.info(JSON.stringify(this.message))
// TODO:如何利用类默认就加上这个属性且有默认值
}
build() {
Column().size({ width: '100%', height: '100%' })
}
}
理想是不用循环
更多关于HarmonyOS鸿蒙Next中如何在类中默认添加属性且有值,但是又不用初始化它的实战教程也可以访问 https://www.itying.com/category-93-b0.html
尊敬的开发者,您好!
在ArkTS中,除了使用as进行类型转换外,可以通过三方库class-transformer实现更安全的类型转换方式实现类型安全校验。核心原理:通过装饰器声明类型映射关系,结合plainToInstance方法将JSON对象转换为真实的类实例对象,确保能调用类方法。实现步骤如下:
-
安装依赖: ohpm install class-transformer ohpm install reflect-metadata
-
定义实体类(使用装饰器标记嵌套类型):
import { Type } from 'class-transformer'; class Photo { id?: number; name?: string; // 类方法可安全调用 getPhotoName(): string | undefined { return this.name?.replace('.png', ''); } } class Album { id?: number; @Type(() => Photo) // 标记嵌套类型 photos: Photo[] = []; } -
安全类型转换:
import { plainToInstance } from 'class-transformer'; import { JSON } from '[@kit](/user/kit).ArkTS'; const rawData: any = JSON.parse('{"photos":[{"id":1,"name":"sunset.png"}]}'); // 关键转换方法 const album = plainToInstance(Album, rawData); // 安全调用类方法 if (album.photos?.getPhotoName()) { console.log(album.photos.getPhotoName()); // 输出:sunset }
更多关于HarmonyOS鸿蒙Next中如何在类中默认添加属性且有值,但是又不用初始化它的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个能满足家假设我接口数据只有两个属性,然后我类型自己加了一个,怎么将将接口数据复制,我写的三个类型的装死的变量上,处理我写的那种循环的办法,
这个能满足假设我接口数据只有两个属性,然后我类型自己加了一个,怎么将接口数据赋值给,我写的三个类型的装饰的变量上,除了我写的那种循环的办法,
在HarmonyOS鸿蒙Next中,可通过@State、@Provide或@StorageLink装饰器在类中声明属性并赋予默认值,无需手动初始化。例如:
@Entry
@Component
struct MyComponent {
@State message: string = 'Hello World'
build() {
// 直接使用已初始化的message属性
}
}
使用装饰器会自动管理状态初始化,属性在组件实例化时即具备默认值。
在HarmonyOS Next中,可以通过构造函数或属性初始化器为类属性设置默认值,无需手动循环赋值。
对于ArkTS类,推荐以下两种方式:
- 使用构造函数初始化:
class UserInfo {
name: string = ''
age: number = 0
isOk: boolean = false
constructor(data?: Partial<UserInfo>) {
if (data) {
Object.assign(this, data)
}
}
}
- 使用工厂方法:
class UserInfo {
name: string = ''
age: number = 0
isOk: boolean = false
static create(data: Partial<UserInfo>): UserInfo {
return Object.assign(new UserInfo(), data)
}
}
使用示例:
aboutToAppear(): void {
this.message = [
new UserInfo({ "name": "张三", "age": 25 }),
new UserInfo({ "name": "李四", "age": 30 })
]
// 或者使用工厂方法
this.message = [
UserInfo.create({ "name": "张三", "age": 25 }),
UserInfo.create({ "name": "李四", "age": 30 })
]
}
这样每个实例都会自动包含isOk: false默认值,无需循环处理。构造函数方式更符合ArkTS的类设计模式,能确保类型安全且代码简洁。


