HarmonyOS 鸿蒙Next 使用xx.d.ts导出接口并实现自定义对象入参
HarmonyOS 鸿蒙Next 使用xx.d.ts导出接口并实现自定义对象入参
使用xx.d.ts导出接口,其中接口的入参是若干自定义对象,该如何实现?
咨询场景描述:
使用d.ts方案导出接口,完成鸿蒙ts调用c++接口。
举例:需要入参传入自定义的User对象
export const getHistoryAsync: (a: User, b: number) => void;
2 回复
将接口定义为export const 接口名: (a: Object) =>返回值; 参考代码:
// ets
import hilog from '@ohos.hilog';
import testNapi from 'libentry.so';
export class testCb {
testNum: number;
testString: string;
}
export interface cb {
// 回调一个string回TS
onCallBack1(id: string): void;
// 回调一个number回TS
onCallBack2(cnt: number): void;
// 回调一个类或者结构体回TS
onCallBack3(cbClass: testCb): void;
}
class tsClass implements cb {
public onCallBack1(id: string) {
// 操作id
console.log("testcallback1 " + id);
}
public onCallBack2(cnt: number) {
// 操作number
console.log("testcallback2 " + cnt);
}
public onCallBack3(cbClass: testCb) {
// 操作cbClass
console.log("testcallback3 " + cbClass.testNum);
}
}
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));
let tscb: tsClass = new tsClass();
testNapi.transobject(tscb);
})
.width('100%');
}
.height('100%');
}
}
}
// .cpp
static napi_value TransObject(napi_env env, napi_callback_info info) {
napi_status status;
size_t argc = 1;
napi_value js_cb;
status = napi_get_cb_info(env, info, &argc, &js_cb, nullptr, nullptr);
assert(status == napi_ok);
napi_value onCallBack1, str_arg;
status = napi_get_named_property(env, js_cb, "onCallBack1", &onCallBack1);
assert(status == napi_ok);
status = napi_create_string_utf8(env, "mangguo", strlen("mangguo"), &str_arg);
assert(status == napi_ok);
size_t cb1argc = 1;
status = napi_call_function(env, js_cb, onCallBack1, cb1argc, &str_arg, nullptr);
size_t cb2argc = 1;
napi_value onCallBack2, int_arg;
status = napi_get_named_property(env, js_cb, "onCallBack2", &onCallBack2);
status = napi_create_int32(env, 2, &int_arg);
assert(status == napi_ok);
status = napi_call_function(env, js_cb, onCallBack2, cb2argc, &int_arg, nullptr);
assert(status == napi_ok);
napi_value oncallback3, arg_object;
status = napi_get_named_property(env, js_cb, "onCallBack3", &oncallback3);
assert(status == napi_ok);
status = napi_create_object(env, &arg_object);
assert(status == napi_ok);
napi_value testNum, testString;
status = napi_create_int32(env, 123, &testNum);
assert(status == napi_ok);
status = napi_set_named_property(env, arg_object, "testNum", testNum);
assert(status == napi_ok);
status = napi_create_string_utf8(env, "mangguo", strlen("mangguo"), &testString);
assert(status == napi_ok);
status = napi_set_named_property(env, arg_object, "testString", testString);
assert(status == napi_ok);
status = napi_call_function(env, js_cb, oncallback3, cb2argc, &arg_object, nullptr);
assert(status == napi_ok);
return nullptr;
}
更多关于HarmonyOS 鸿蒙Next 使用xx.d.ts导出接口并实现自定义对象入参的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,使用.d.ts
文件导出接口并实现自定义对象入参通常涉及到TypeScript的类型定义。以下是如何在鸿蒙应用中进行这一操作的简要说明:
-
创建.d.ts文件: 在你的项目中,创建一个
.d.ts
文件,用于声明你希望导出的接口。例如,创建一个名为interfaces.d.ts
的文件。 -
定义接口: 在
interfaces.d.ts
文件中,定义你的接口。例如:export interface CustomObject { name: string; age: number; } export interface MyApi { myFunction(param: CustomObject): void; }
-
实现接口: 在你的TypeScript文件中,实现上述接口。例如:
import { MyApi, CustomObject } from './interfaces'; class ApiImpl implements MyApi { myFunction(param: CustomObject) { console.log(`Name: ${param.name}, Age: ${param.age}`); } } const api = new ApiImpl(); api.myFunction({ name: 'John', age: 30 });
这样,你就成功地在鸿蒙系统中使用.d.ts
文件导出了接口,并实现了带有自定义对象入参的函数。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,