1、在 uni-app x 的 UTS 语法中: - 不能直接访问 `any` 类型对象的属性 - 需要将对象转换为 `UTSJSONObject` 类型后使用 `getString()`、`getNumber()` 等方法访问属性 - 数组元素需要明确的类型定义才能在模板中正确访问属性 - 空数组需要明确指定类型,如 `[] as string[]` - 函数必须在调用前定义(不支持函数提升) - 访问动态对象属性需要使用 `UTSJSONObject` 的 `getString()`、`getNumber()` 等方法 - 类型导入需要使用 `type` 关键字 -UTS 不允许直接访问 `any` 类型的属性。需要将参数类型改为 `MessageItem` - UTS 不允许直接访问 `any` 类型参数的属性 - 必须使用明确的类型定义才能访问属性 - 函数必须先定义后使用(包括生命周期钩子调用的函数) - 不允许直接访问 `any` 类型参数的属性 - `if` 条件必须是 `boolean` 类型,不能是 `Any?` - `forEach` 箭头函数中不能使用赋值表达式作为函数体 - 函数必须先定义后使用 - `any` 类型不能直接使用点语法访问属性,必须使用索引访问 `obj['property']` - 访问后需要类型转换 `as number` / `as string` - `if` 条件必须是 `boolean` 类型 - 函数必须先定义后调用 - `any` 类型不能直接使用点语法访问属性 - 需要转换为 `Record` 后使用索引访问 `obj['property']` - 模板中的 `||` 运算符左边必须是 boolean 类型 - 可空类型使用可选链 `?.` 和空值合并 `??` - `uni.showModal` 的 `success` 回调不能是 `async` 函数 - 解决方案:创建独立的 async 函数(如 `doCancelOrder`、`doConfirmReceive`、`doApplyRefund`),在回调中调用 - 模板中访问可空类型属性前必须先判空 `v-if="order != null"` - 使用可选链 `?.` 和空值合并 `??` 处理可空类型 - `uni.showModal` 的 `success` 回调不能是 `async` 函数 - 函数必须在使用前定义 - Promise.all 需要显式指定类型参数,如 Promise.all([...]) - CSS 伪类选择器 :nth-child() 不支持,需要移除 - 如果函数 A 调用了函数 B,则函数 B 必须在函数 A 之前定义(不仅是调用顺序,而是定义顺序) - 不支持 Record 对象字面量语法,需要改用 if-else 或 Map - Promise.all 在某些情况下类型推断失败,可以改用顺序执行 await - onLoad 的 options 参数是 any 类型,需要转换为 UTSJSONObject 后使用 getString() 方法访问属性 - decodeURIComponent 返回 String? 类型,需要检查 null 后再赋值 - 条件判断必须使用布尔类型,字符串要用 `!= ''` 代替 truthy 判断 - 数组元素类型要明确,不要用 any[],否则模板中无法访问元素属性 - 可空数组类型调用方法需要使用 `!` 非空断言,如 `arr!.join(',')` - v-model 绑定的变量需要明确类型,如 `quantity: 1 as number` - 不支持 `Record` 对象字面量语法 - 模板中可空类型必须使用 `?.` 安全访问 - `uni.showModal` 的 `success` 回调不能是 `async` 函数 - `any` 类型属性访问需转换为 `Record` 后用索引访问 - 不支持 `Record` 对象字面量语法 - `any` 类型属性访问需转换为 `Record` 后用索引访问 - `uni.showModal` 的 `success` 回调不能是 `async` 函数 - 模板中可空类型必须使用 `?.` 安全访问 - 不支持 `Object.values()` 和 `Object.entries()` - 嵌套的数组方法调用可能导致类型推断失败,应拆分为独立变量 - `any` 类型属性访问需转换为 `Record` 后用索引访问 - 不支持 `Record` 对象字面量语法 - 不支持 `Object.keys()`、`Object.values()`、`Object.entries()` - 嵌套的数组方法调用可能导致类型推断失败,应改用 for 循环 - `any` 类型属性访问需转换为 `Record` 后用索引访问 - 函数必须在使用前定义 - 对象字面量 `{...}` 只能用于构造类型(class),不能用于接口(interface) - 需要创建动态对象时,应使用 `new UTSJSONObject()` 然后调用 `.set()` 方法 - 对于 `type` 定义的对象类型,同样需要使用 `UTSJSONObject` - 对于 `any[]` 或 `reactive` 数组,访问元素属性时需要先转换为 `Record` 或 `any[]` - 使用索引访问属性时,推荐使用方括号语法 `obj['property']` 而非点语法 `obj.property` - 这是因为 UTS 的类型系统比 TypeScript 更严格,需要在运行时明确类型转换 - `reactive` 对象在 UTS 中不支持索引器赋值操作 - 对于需要整体替换的数组,推荐使用 `ref` 而非 `reactive` - 使用 `ref` 时,通过 `.value` 进行整体替换可以正确触发响应式更新 - 函数必须在使用前声明(不支持函数提升) - 访问 `any` 类型对象的属性需要先转换为 `Record` - `ref` 数组元素不能直接整体替换,需要修改元素属性 - 对于可能为 `null` 的参数,需要显式检查后再传递给函数 - 函数必须在使用前声明(不支持函数提升) - 依赖关系需要明确:被调用的函数必须先定义 - 这与 JavaScript 的函数提升行为不同,UTS 更接近 C/Java 的编译方式 - UTS中箭头函数 `() => {}` 有时会导致"Parenthesized expression cannot be empty"错误 - 解决方案:使用普通函数 `function name(): Type {}` 代替箭头函数 - 变量声明必须有显式类型或初始化值 - 对象属性访问使用 `obj['key']` 而非 `obj.key` - 数组赋值时类型必须匹配 PS D:\companyproject\mall-trae2> npm run build:app 2>&1 npm error Missing script: "build:app" npm error npm error To see a list of scripts, run: npm error npm run npm error A complete log of this run can be found in: C:\Users\Huawei\AppData\Local\npm-cache\_logs\2026-02-24T00_58_23_018Z-debug-0.log