HarmonyOS 鸿蒙Next 基于接口声明的数据如何实现响应式?
HarmonyOS 鸿蒙Next 基于接口声明的数据如何实现响应式?
由于卡片不支持@ComponentV2,所以不考虑v2的情况,简化的数据结构示例如下:
interface Teacher {
type: ‘Teacher’
canTeach: boolean
}
interface Driver {
type: ‘driver’
canDrive: boolean
}
type People = Teacher | Driver
这样实现了不同的 type 的对象有不同的属性,并且都可以通过 People 去使用。
有什么方式可以让 People 具有响应式吗?
注:真实情况数据是多层嵌套的,都通过 interface 和 type 组合声明的数据结构。
更多关于HarmonyOS 鸿蒙Next 基于接口声明的数据如何实现响应式?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
@弹一闪xxx 应该是我没说清楚哈,再尽量解释下:
通过联合声明,可以在定义对象的时候,根据不同的 type,来提示相应的属性,如下面截图,如果 type 是 Teacher,p1 只能选择 canTeach 而不能 canDrive,比较符合业务对数据的要求,当然通过 class 声明也可以,但 [@Observe](/user/Observe) 和 [@ObserveV2](/user/ObserveV2) 不通用,不知道怎么解决
更多关于HarmonyOS 鸿蒙Next 基于接口声明的数据如何实现响应式?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,首先interface修饰的对象不能被实例化,只能实例化一个对象然后强转,只有公共属性type被保留,其他非公共属性被遮蔽,需要通过type识别具体类型才能使用,在其他语言,如java语法中,父子类多态情况下,父类承接子类对象,子类独有属性也将会被遮蔽, 不存在你说的这种响应式
interface Teacher2{
type:"Teacher",
canTeach:boolean
}
interface Driver2{
type:“driver”,
canDrive:boolean
}
type People2 = Teacher2 | Driver2
canClick2(){
let people1 = {
type:“driver”,
canDrive:true
} as People2
console.log("People2 type is: "+people1.type);// 其他属性不能被发现
if(people1.type==‘driver’){
let peopleV2=people1 as Driver2
console.log(“people2 can drive :”+peopleV2.canDrive)
}
}
看下面有图回复哈~