uni-app 报Bug uts传入number类型 编译报错期望Number实际int 感觉莫名其妙的

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 报Bug uts传入number类型 编译报错期望Number实际int 感觉莫名其妙的

操作步骤:

  • uts语法

预期结果:

  • 正常

实际结果:

  • 错误

bug描述:

  • uts写插件在android平台编译报错
    • inferred type is Number but Int was expected‌
      • 传入number类型自动转成kotlin int类型,而编译报错需要Number类型,代码提示是number,感觉很混乱
    • inferred type is Row? but Row was expected‌
      • 传入Row类型,期望Row?类型,也是感觉很奇怪

图片

Image 1 Image 2

信息类别 详情
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 11
HBuilderX类型 正式
HBuilderX版本 3.99
手机系统 Android
手机系统版本 Android 12
手机厂商 模拟器
手机机型 mumu
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

3 回复

那个setColumHidden方法的第一个参数,声明需要int。你可以看下是不是那个方法的定义处写错了,如果确定需要int,那就用number的toInt方法转换。
?这个问号代表可为空。这个我们看看能不能兼容下。

在HBuilderX3.99的帮助菜单或控制台报bug,可以更简单的提交复现工程


问题2是指:
类型不匹配: 推断类型是Row?(可为空的Row),但预期的是Row。‌
在uts中 Row? 不能传给 Row Row 可以传给 Row?

uni-app 中使用 uts(Uni TypeScript)时,如果你遇到传入 number 类型时编译报错,提示期望 Number 但实际是 int,这可能是由于 uts 在处理类型时的一些限制或类型推断问题。

可能的原因和解决方案:

  1. 类型推断问题

    • uts 在处理 number 类型时,可能会将其推断为 int 或其他具体的数值类型,而不是通用的 Number 类型。
    • 你可以尝试显式地指定类型为 Number,而不是依赖类型推断。
    let num: Number = 42; // 显式指定为 Number 类型
  2. 类型转换

    • 如果你需要将 int 或其他数值类型转换为 Number,可以使用 Number() 构造函数进行转换。
    let num: Number = Number(42); // 将 int 转换为 Number
  3. 检查 API 文档

    • 确保你调用的 API 或函数期望的参数类型是 Number,而不是 int 或其他具体类型。如果 API 期望的是 int,那么你需要传入 int 类型的值。
  4. 更新 uni-apputs 版本

    • 如果你使用的是较旧版本的 uni-apputs,可能存在一些已知的 Bug。尝试更新到最新版本,看看问题是否得到解决。
  5. 使用 any 类型

    • 如果以上方法都无法解决问题,你可以暂时使用 any 类型来绕过类型检查,但这并不是一个推荐的解决方案。
    let num: any = 42; // 使用 any 类型绕过类型检查
  6. 检查编译配置

    • 确保你的 tsconfig.json 或其他编译配置文件中没有对类型进行不正确的限制或转换。

示例代码:

// 显式指定为 Number 类型
let num1: Number = 42;

// 使用 Number() 构造函数进行转换
let num2: Number = Number(42);

// 使用 any 类型绕过类型检查
let num3: any = 42;
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!