仔仔_iZaiZaiA
仔仔_iZaiZaiA
  • 发布:2025-12-29 10:52
  • 更新:2025-12-29 11:34
  • 阅读:22

uts any的问题

分类:uni-app x
uts

使用:

const id = options!.id;  
console.log('id', isEmpty(id))

方法函数:

//检查是否为空值  
export const isEmpty: IsEmpty = function (value: any): boolean {  
    console.log(value)  
    //如果是字符串,判断字符串是否为  undefined、null 以及 空  
    //如果是对象,判断对象是否为空  
    //如果是数组,判断数组长度是否为0(也就是空)  
    return false  
}

报错:

[plugin:uni:app-uts] 编译失败  
error: 参数类型不匹配:实际类型为 'String?',预期类型为 '@ParameterName(...) Any'。错误详情链接: https://doc.dcloud.net.cn/uni-app-x/uts/compiler-known-issues.html#error17‌
2025-12-29 10:52 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

根据错误信息和知识库分析,问题在于UTS类型系统中any类型与可空类型的不匹配。错误error17表明实际传入的是String?(可空字符串),但函数期望Any类型。

原因分析:

  1. options!.id使用了非空断言,但实际id可能为null/undefined
  2. UTS在4.18+版本中any类型包含null,但编译器对参数类型检查严格
  3. isEmpty函数声明为(value: any),但调用时传入的是可能为空的值

解决方案:

  1. 移除危险的非空断言,改用安全访问:

    const id = options?.id; // 使用可选链  
    console.log('id', isEmpty(id))
  2. 修正isEmpty函数实现(参考知识库跨平台判空规范):

    export const isEmpty = (value: any): boolean => {  
    if (value == null) return true; // 同时检查null/undefined  
    if (typeof value === 'string' || Array.isArray(value)) {  
    return value.length === 0;  
    }  
    if (typeof value === 'object') {  
    return Object.keys(value).length === 0;  
    }  
    return false;  
    }

关键点说明:

注意:当前HBuilderX正式版4.87已支持此规范,建议升级到最新版避免类似问题。

内容为 AI 生成,仅供参考
仔仔_iZaiZaiA

仔仔_iZaiZaiA (作者) - 技术菜,又不想上班的废物打杂 - 仔仔

使用 options?.id 依旧报错:参数类型不匹配:实际类型为 'String?',预期类型为 '@ParameterName(...) Any'。错误详情链接:

仔仔_iZaiZaiA

仔仔_iZaiZaiA (作者) - 技术菜,又不想上班的废物打杂 - 仔仔

真麻烦,改成下面这样,终于可以了

export const isEmpty: IsEmpty = function (value: null | string | number | object | Array | UTSJSONObject): boolean {  
    //如果是空,直接返回  
    if (value === null || value === '' || value === 'undefined') {  
        return true  
    }  
    //数组,要注意顺序  
    else if (value instanceof Array) {  
        return value.length <= 0  
    }  
    //对象,要注意顺序  
    else if (typeof value === 'object') {  
        const obj = value as UTSJSONObject  
        let res = UTSJSONObject.keys(obj).length  
        return res <= 0  
    }  
    return false  
}

要回复问题请先登录注册