皓峰通讯
皓峰通讯
  • 发布:2025-12-17 18:30
  • 更新:42 分钟前
  • 阅读:21

鸿蒙平台选择联系人插件报错contact.selectContacts

分类:鸿蒙Next

鸿蒙插件

import { contact } from '@kit.ContactsKit';  
import { BusinessError } from '@kit.BasicServicesKit';  

export const name = "harmony-permissions"  

export const selectContact = (isMultiSelect: boolean) => {  
    return new Promise((resolve, reject) => {   
        contact.selectContacts({isMultiSelect},(err: BusinessError, data) => {  
            if (err) {  
                console.error(`selectContact callback: err->${JSON.stringify(err)}`);  
                reject(err);  
                return;  
            }  
            console.log(`selectContact callback: success data->${JSON.stringify(data)}`);  
            resolve(JSON.stringify(data));  
        });  
    })  
}

真机调试时报错

18:14:45.946 > hvigor ERROR: Failed :entry:default@CompileArkTS...  
18:14:45.946 > hvigor ERROR: ArkTS Compiler Error  
18:14:46.182 1 ERROR: 10505001 ArkTS Compiler Error  
18:14:46.182 ‌‌⁠error: Type 'UTSJSONObject' has no properties in common with type 'ContactSelectionOptions'‌  
18:14:46.182 at uni_modules/harmony-permissions/utssdk/app-harmony/index.uts:8:30  
18:14:46.182 6  |  export const selectContact = (isMultiSelect: boolean) => {  
18:14:46.182 7  |      return new Promise((resolve, reject) => {   
18:14:46.182 8  |          contact.selectContacts({isMultiSelect},(err: BusinessError, data) => {  
18:14:46.182    |                                ^  
18:14:46.182 9  |              if (err) {  
18:14:46.182 10 |                  __f__('error','at uni_modules/harmony-permissions/utssdk/app-harmony/index.uts:10',`selectContact callback: err->${JSON.stringify(err)}`);⁠  
18:14:46.182 COMPILE RESULT:FAIL {ERROR:2 WARN:638}  
18:14:46.182 > hvigor ERROR: BUILD FAILED in 36 s 978 ms
2025-12-17 18:30 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

根据错误信息 Type 'UTSJSONObject' has no properties in common with type 'ContactSelectionOptions',问题出在 UTS 类型校验上。鸿蒙平台要求 UTS 插件必须严格匹配类型定义,而您的代码直接传递了 {isMultiSelect} 对象,未显式声明类型。

解决方案:

  1. 在 UTS 文件中需明确定义参数类型,参考知识库中 使用uts调用鸿蒙原生API 的规范
  2. 修改代码为:
    
    import { contact, ContactSelectionOptions } from '@kit.ContactsKit';  

export const selectContact = (isMultiSelect: boolean) => {
return new Promise((resolve, reject) => {
const options: ContactSelectionOptions = { isMultiSelect }; // 显式声明类型
contact.selectContacts(options, (err: BusinessError, data) => {
// ...原有逻辑
});
})
}



**原因说明:**  
- 鸿蒙 UTS 编译器要求严格类型匹配(知识库中 `dev-old` 文档强调)  
- 直接传递字面量会被识别为 `UTSJSONObject`,而非目标接口类型  
- 需在插件中导入并声明正确的类型定义  

建议参考 [uni-app 鸿蒙开发文档](https://uniapp.dcloud.net.cn/tutorial/harmony/dev-old.html) 中 UTS 插件开发规范,确保类型声明完整。当前 uni-app 正式版 4.85 已支持此模式,无需额外配置。
内容为 AI 生成,仅供参考
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

提供下复现工程,并说明你的 HBuilderX 版本、uniapp 还是 uniapp x

这个 api https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-contact#contactselectcontacts10-2
看报错,是你的 options 类型不是 ContactSelectionOptions ,注意在鸿蒙中类型引用应当一致,不能想 ts 一样使用结构化类型

要回复问题请先登录注册