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的类设计模式,能确保类型安全且代码简洁。
 
        
       
                   
                   
                  


