如何解决napi\_create\_bool无法创建C++的bool类型
====================================

#### 问题现象

Node-API提供了一批接口帮助把标准数据类型转为napi\_value，比如napi\_create\_double、napi\_create\_int32等等，但是napi\_create\_bool无法创建bool类型并转换为napi\_value。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e0/v3/rRZf_4i7Rci9hIXCD5VqiA/zh-cn_image_0000002628899078.png?HW-CC-KV=V1&HW-CC-Date=20260709T133835Z&HW-CC-Expire=86400&HW-CC-Sign=F52D51D8B39B8E725ED408307822BCAA321F0C0E25D6A9837FD9DF4CD83923F9 "点击放大")

#### 背景知识

HarmonyOS Node-API是基于Node.js 10.x LTS的[Node-API](https://nodejs.org/docs/latest-v10.x/api/n-api.html)规范扩展开发的机制，为开发者提供了ArkTS/JS与C/C++模块之间的交互能力。它提供了一组稳定的、跨平台的API，可以在不同的操作系统上使用。一般情况下HarmonyOS应用开发使用ArkTS/JS语言，但部分场景由于性能、效率等要求，比如游戏、物理模拟等，需要依赖使用现有的C/C++库。Node-API规范封装了I/O、CPU密集型、OS底层等能力并对外暴露ArkTS/JS接口，从而实现ArkTS/JS和C/C++的交互。

#### 问题定位

Node-API提供了专用接口napi\_get\_boolean用于将bool类型的值转换为napi\_value类型。

#### 分析结论

未使用Node-API专用接口导致了无法正常获取native侧的bool值。

#### 修改建议

使用napi\_get\_boolean即实现将C++中的bool类型转换为napi，参考代码如下：

_/\*_
 _\* Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved._
 _\*/_
#include "napi/native\_api.h"

bool  GetExcuteResult()
{
    return true;
}

static napi\_value BooleanJudge(napi\_env env, napi\_callback\_info info)
{
    bool value = GetExcuteResult();
    napi\_value jsResult;
    napi\_get\_boolean(env, value, &jsResult);
    return jsResult;

}

EXTERN\_C\_START
static napi\_value Init(napi\_env env, napi\_value exports)
{
    napi\_property\_descriptor desc\[\] = {
        { "booleanJudge", nullptr, BooleanJudge, nullptr, nullptr, nullptr, napi\_default, nullptr }
    };
    napi\_define\_properties(env, exports, sizeof(desc) / sizeof(desc\[0\]), desc);
    return exports;
}
EXTERN\_C\_END

static napi\_module demoModule = {
    .nm\_version = 1,
    .nm\_flags = 0,
    .nm\_filename = nullptr,
    .nm\_register\_func = Init,
    .nm\_modname = "entry",
    .nm\_priv = ((void\*)0),
    .reserved = { 0 },
};

extern "C" \_\_attribute\_\_((constructor)) void RegisterEntryModule(void)
{
    napi\_module\_register(&demoModule);
}

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a6/v3/Qx5tRAvXTlqb-tE28219AQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T133835Z&HW-CC-Expire=86400&HW-CC-Sign=1749583D3C9F5386BF085EDE541A311F354A1944440E526E2B9885D7CAEDB10C)

napi\_get\_boolean的函数定义：根据给定的C中的boolean值，获取js中的bool对象。

#### 总结

对于C++语言可以借助Node-API功能实现跨语言交互，官方参考链接：HarmonyOS的napi接口参考了[Node.js文档](https://nodejs.org/docs/latest/api/n-api.html#napi_get_boolean)。