如何使用napi_typeof接口获取ArkTS value的类型?

阅读 597
1 个回答

在C++代码中,获取传入的ArkTS值参数,调用napi_typeof接口判断其类型,接口返回一个napi_valuetype枚举类型的值,根据该值通过switch语句创建相应的字符串描述(如“Input type is napi_undefined”等),并将其转换为napi_value类型返回。示例代码如下:

#include "napi/native_api.h"

static napi_value NapiTypeof(napi_env env, napi_callback_info info) {
    size_t argc = 1;
    napi_value args[1] = {nullptr};
    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
    napi_valuetype valueType;
    napi_status status = napi_typeof(env, args[0], &valueType);
    if (status!= napi_ok) {
        napi_throw_error(env, nullptr, "Node-API napi_typeof fail");
        return nullptr;
    }
    napi_value returnValue = nullptr;
    switch (valueType) {
        case napi_undefined:
            napi_create_string_utf8(env, "Input type is napi_undefined", NAPI_AUTO_LENGTH, &returnValue);
            break;
        case napi_null:
            napi_create_string_utf8(env, "Input type is napi_null", NAPI_AUTO_LENGTH, &returnValue);
            break;
        //... 其他类型处理
        default:
            napi_create_string_utf8(env, "unknown", NAPI_AUTO_LENGTH, &returnValue);
    }
    return returnValue;
}

ArkTS侧传入不同类型的值(如undefinednull、布尔值、数字、字符串、对象、函数、BigInt等)调用该接口,并通过日志输出获取到的类型描述(如hilog.info(0x0000, 'testTag', 'Test Node-API napi_typeof: %{public}s', testNapi.napiTypeof(varUndefined));等)。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进