HarmonyOS 鸿蒙Next中AKI如何将继承类暴露给ts层

HarmonyOS 鸿蒙Next中AKI如何将继承类暴露给ts层

C++中定义有两个类,

class A {
public:
  bool a = false;
}

class B:A {
public:
  bool b = false;
}

现在想将class B暴露给ts层,外部可以访问 a、b两个属性,应该怎么写?

在中心库的文档中没有找到可以声明继承关系的语法。如果直接在class B的 JSBIND_CLASS 中用JSBIND_PROPERTY绑定a属性,会报错。

3 回复

JSBIND_EXTEND

用这个声明可以

更多关于HarmonyOS 鸿蒙Next中AKI如何将继承类暴露给ts层的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,AKI(ArkUI Kit Interface)通过@ExposeToTS装饰器将继承类暴露给TS层。开发者只需在继承类前添加@ExposeToTS,即可使该类在TS层中可用。例如:

@ExposeToTS
class MyClass extends BaseClass {
    // 类实现
}

这样,MyClass就可以在TS层中被调用和使用。

在HarmonyOS Next中通过AKI将继承类暴露给TS层,需要使用JSBIND_INHERITS宏声明继承关系。对于你的示例代码,正确写法应该是:

#include "aki/jsbind.h"

class A {
public:
    bool a = false;
};

JSBIND_CLASS(A) {
    JSBIND_CONSTRUCTOR<>();
    JSBIND_PROPERTY(a);
};

class B : public A {
public:
    bool b = false;
};

JSBIND_CLASS(B) {
    JSBIND_INHERITS(A);  // 声明继承关系
    JSBIND_CONSTRUCTOR<>();
    JSBIND_PROPERTY(a);  // 继承的属性
    JSBIND_PROPERTY(b);  // 自身的属性
};

关键点:

  1. 必须使用JSBIND_INHERITS宏显式声明继承关系
  2. 基类A也需要用JSBIND_CLASS进行绑定
  3. 子类B中需要同时绑定继承的属性和自身属性

这样TS层就能正确访问到B实例的a和b属性了。

回到顶部