87 lines
5.7 KiB
Plaintext
87 lines
5.7 KiB
Plaintext
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<string, any>` 后使用索引访问 `obj['property']`
|
||
- 模板中的 `||` 运算符左边必须是 boolean 类型
|
||
- 可空类型使用可选链 `?.` 和空值合并 `??`
|
||
- `uni.showModal` 的 `success` 回调不能是 `async` 函数
|
||
- 解决方案:创建独立的 async 函数(如 `doCancelOrder`、`doConfirmReceive`、`doApplyRefund`),在回调中调用
|
||
- 模板中访问可空类型属性前必须先判空 `v-if="order != null"`
|
||
- 使用可选链 `?.` 和空值合并 `??` 处理可空类型
|
||
- `uni.showModal` 的 `success` 回调不能是 `async` 函数
|
||
- 函数必须在使用前定义
|
||
- Promise.all 需要显式指定类型参数,如 Promise.all<any>([...])
|
||
- CSS 伪类选择器 :nth-child() 不支持,需要移除
|
||
- 如果函数 A 调用了函数 B,则函数 B 必须在函数 A 之前定义(不仅是调用顺序,而是定义顺序)
|
||
- 不支持 Record<K, V> 对象字面量语法,需要改用 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<K, V>` 对象字面量语法
|
||
- 模板中可空类型必须使用 `?.` 安全访问
|
||
- `uni.showModal` 的 `success` 回调不能是 `async` 函数
|
||
- `any` 类型属性访问需转换为 `Record<string, any>` 后用索引访问
|
||
- 不支持 `Record<K, V>` 对象字面量语法
|
||
- `any` 类型属性访问需转换为 `Record<string, any>` 后用索引访问
|
||
- `uni.showModal` 的 `success` 回调不能是 `async` 函数
|
||
- 模板中可空类型必须使用 `?.` 安全访问
|
||
- 不支持 `Object.values()` 和 `Object.entries()`
|
||
- 嵌套的数组方法调用可能导致类型推断失败,应拆分为独立变量
|
||
- `any` 类型属性访问需转换为 `Record<string, any>` 后用索引访问
|
||
- 不支持 `Record<K, V>` 对象字面量语法
|
||
- 不支持 `Object.keys()`、`Object.values()`、`Object.entries()`
|
||
- 嵌套的数组方法调用可能导致类型推断失败,应改用 for 循环
|
||
- `any` 类型属性访问需转换为 `Record<string, any>` 后用索引访问
|
||
- 函数必须在使用前定义
|
||
- 对象字面量 `{...}` 只能用于构造类型(class),不能用于接口(interface)
|
||
- 需要创建动态对象时,应使用 `new UTSJSONObject()` 然后调用 `.set()` 方法
|
||
- 对于 `type` 定义的对象类型,同样需要使用 `UTSJSONObject`
|
||
- 对于 `any[]` 或 `reactive` 数组,访问元素属性时需要先转换为 `Record<string, any>` 或 `any[]`
|
||
- 使用索引访问属性时,推荐使用方括号语法 `obj['property']` 而非点语法 `obj.property`
|
||
- 这是因为 UTS 的类型系统比 TypeScript 更严格,需要在运行时明确类型转换
|
||
- `reactive` 对象在 UTS 中不支持索引器赋值操作
|
||
- 对于需要整体替换的数组,推荐使用 `ref` 而非 `reactive`
|
||
- 使用 `ref` 时,通过 `.value` 进行整体替换可以正确触发响应式更新
|
||
- 函数必须在使用前声明(不支持函数提升)
|
||
- 访问 `any` 类型对象的属性需要先转换为 `Record<string, any>`
|
||
- `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 |