提交 0adbddce 编写于 作者: W wanganxp

更uts文档

上级 92a79cbb
...@@ -28,14 +28,12 @@ uts这门语言,有2个用途: ...@@ -28,14 +28,12 @@ uts这门语言,有2个用途:
1. 开发uni-app 和 uni-app x 的原生扩展插件:因为uts可以调用所有原生能力。 1. 开发uni-app 和 uni-app x 的原生扩展插件:因为uts可以调用所有原生能力。
2. uts和uvue一起组合,开发原生级的项目,也就是 uni-app x 项目 2. uts和uvue一起组合,开发原生级的项目,也就是 uni-app x 项目
从HBuilderX 3.9起,支持uni-app x项目。 从HBuilderX 3.9起,支持uni-app x项目。详见[uni-app x](../readme.md)
uni-app x 开发App时,输出的是纯原生的App(Android上就是kotlin的app),里面没有js引擎和webview。详见[uni-app x](../readme.md)
也就是说,uts可以在uni-app中使用,也可以在uni-app x中使用。 也就是说,uts可以在uni-app中使用,也可以在uni-app x中使用。
- 在uni-app中,主编程语言是js。uts可以开发原生插件,包括API插件和组件插件。 - 在uni-app中,主编程语言是js。uts可以开发原生插件,包括API插件和组件插件。
- 在uni-app x中,主编程语言是uts。不管是应用逻辑还是扩展插件,均使用uts编程,没有js。 - 在uni-app x中,主编程语言是uts。不管是应用逻辑还是扩展插件,均使用uts编程。仅在Web平台和iOS的js驱动模式下可以使用js。
如果插件作者,开发了uts插件,也可以同时在uni-app和uni-app x中使用。比如这2个uts插件: 如果插件作者,开发了uts插件,也可以同时在uni-app和uni-app x中使用。比如这2个uts插件:
- 电量:[https://ext.dcloud.net.cn/plugin?id=9295](https://ext.dcloud.net.cn/plugin?id=9295) - 电量:[https://ext.dcloud.net.cn/plugin?id=9295](https://ext.dcloud.net.cn/plugin?id=9295)
...@@ -145,7 +143,7 @@ vue 选项式开发时,冒号被用于赋值,无法通过let、const和冒 ...@@ -145,7 +143,7 @@ vue 选项式开发时,冒号被用于赋值,无法通过let、const和冒
</script> </script>
``` ```
上述示例仅在 uni-app x 的uvue页面生效。uni-app js引擎版,不支持在页面里写uts代码,只支持在uts插件里写uts代码。 上述示例仅在 uni-app x 的uvue页面生效。老版uni-app,即js引擎版,不支持在页面里写uts代码,只支持在uts插件里写uts代码。
### 类型自动推导 ### 类型自动推导
......
# Promise # Promise
Promise 对象表示异步操作最终的完成(或失败)以及其结果值。仅 HBuilderX 3.9+ 安卓平台支持。 Promise 对象表示异步操作最终的完成(或失败)以及其结果值。
### Constructor(fn) ### Constructor(fn)
...@@ -220,3 +220,4 @@ Promise 对象表示异步操作最终的完成(或失败)以及其结果值 ...@@ -220,3 +220,4 @@ Promise 对象表示异步操作最终的完成(或失败)以及其结果值
## Bug & Tips@tips ## Bug & Tips@tips
* 目前 Promise 类型编译到 kotlin 为 io.dcloud.uts.UTSPromise * 目前 Promise 类型编译到 kotlin 为 io.dcloud.uts.UTSPromise
* 编译到swift时暂不支持。但在uvue里因为iOS默认js驱动所以可以使用Promise
\ No newline at end of file
# 类型@data-type # 类型@data-type
强类型语言的特点,是数据类型要求严格。它带来2个好处: 强类型语言的特点,是数据类型要求严格。它带来2个好处:
1. 高性能:明确的类型有更大的优化空间,在iOS和Android等OS上可以节省内存、提高运算速度;web端由于仍编译为js,不具有类型性能优化。 1. 高性能:明确的类型有更大的优化空间,在Android等OS上可以节省内存、提高运算速度;web端由于仍编译为js,不具有类型性能优化。
2. 安全的代码:强类型代码编写虽然没有弱类型自由,但类型检查、非空检查...等各种检查可以提高代码的健壮性。 2. 安全的代码:强类型代码编写虽然没有弱类型自由,但类型检查、非空检查...等各种检查可以提高代码的健壮性。
如果您是js开发者,那么需要一定的学习过程来掌握 UTS 的类型系统。总体原则是你将牺牲一些代码的灵活性,来换取代码的健壮性和高性能。 如果您是js开发者,那么需要一定的学习过程来掌握 UTS 的类型系统。总体原则是你将牺牲一些代码的灵活性,来换取代码的健壮性和高性能。
...@@ -1710,6 +1710,8 @@ HBuilderX 3.9起内置了一个json转type工具,在`json编辑器`中选择 ...@@ -1710,6 +1710,8 @@ HBuilderX 3.9起内置了一个json转type工具,在`json编辑器`中选择
注意json数据的属性名称需要引号包围。 注意json数据的属性名称需要引号包围。
如果找不到这个右键菜单,检查是否是右下角是否显示JSON编辑器;检查是否安装了uts/uni-app x相关插件,一般真机运行时会自动安装相关插件。
### 为vue的data中的json定义类型 ### 为vue的data中的json定义类型
uvue文件中data中的json数据也涉及类型定义。此时注意:type定义必须放在`export default {}`前面。 uvue文件中data中的json数据也涉及类型定义。此时注意:type定义必须放在`export default {}`前面。
...@@ -1776,7 +1778,7 @@ console.log(obj.age) //25 ...@@ -1776,7 +1778,7 @@ console.log(obj.age) //25
js中的 undefined类型表示变量被定义,但是未赋值或初始化。 js中的 undefined类型表示变量被定义,但是未赋值或初始化。
uts 仅在编译为js时支持 undefined,在编译为kotlin和swift时不支持 undefined。即App平台不允许变量未赋值。每个有类型的变量都需要初始化或赋值。 uts 仅在编译为js时支持 undefined,在编译为kotlin和swift时不支持 undefined。即Android平台不允许变量未赋值。每个有类型的变量都需要初始化或赋值。
考虑多端,应避免使用undefined。 考虑多端,应避免使用undefined。
...@@ -1835,7 +1837,7 @@ HBuilder支持给变量定义特殊值域string类型,这些类型在HBuilder ...@@ -1835,7 +1837,7 @@ HBuilder支持给变量定义特殊值域string类型,这些类型在HBuilder
- 支持 [|null](#null) (即可为空) - 支持 [|null](#null) (即可为空)
- [字面量联合类型](#literal-union-type) - [字面量联合类型](#literal-union-type)
App平台不支持其他方式的联合类型。 编译为非js时,不支持其他方式的联合类型。
在编译为js时开发者可以使用其他联合类型。但考虑到多端兼容,应尽量避免。 在编译为js时开发者可以使用其他联合类型。但考虑到多端兼容,应尽量避免。
...@@ -1849,4 +1851,4 @@ uts内置的类型,包括浏览器、Android、iOS内置的类型,在编译 ...@@ -1849,4 +1851,4 @@ uts内置的类型,包括浏览器、Android、iOS内置的类型,在编译
**注意** **注意**
- web端联合类型等复杂类型在编译后会被擦除 - 编译到js时联合类型等复杂类型在编译后会被擦除
...@@ -346,4 +346,4 @@ fn('a', 'b', 'c') // 'a' ['b', 'c'] ...@@ -346,4 +346,4 @@ fn('a', 'b', 'c') // 'a' ['b', 'c']
fn('a', ...['b', 'c']) // 'a' ['b', 'c'] fn('a', ...['b', 'c']) // 'a' ['b', 'c']
``` ```
注意:在app平台,uvue 页面的 methods 中定义的方法不支持剩余参数。 注意:在app-android平台,uvue 页面的 methods 中定义的方法不支持剩余参数。
...@@ -175,7 +175,7 @@ const status = age >= 18 ? "adult" : "minor"; ...@@ -175,7 +175,7 @@ const status = age >= 18 ? "adult" : "minor";
- `>>=` - `>>=`
* 右移赋值运算符 (>>=) 将变量向右移动指定数量的位,并将结果赋值给变量。 * 右移赋值运算符 (>>=) 将变量向右移动指定数量的位,并将结果赋值给变量。
- `===` - `===`
* 当两边操作数指向同一个对象时,引用相等 (===) 运算符返回true。对于运行时表示为原生类型的值(例如 Int),引用相等 (===)等价于相等(==)。 * 当两边操作数指向同一个对象时,引用相等 (===) 运算符返回true。不同平台有差距,[见下](#completeComparison)
- `!==` - `!==`
* 当两边操作数不指向同一个对象时,引用不等 (!==) 运算符返回true。 * 当两边操作数不指向同一个对象时,引用不等 (!==) 运算符返回true。
- `-` - `-`
...@@ -277,6 +277,15 @@ uts 中比较运算符在大部分场景下和 ts 中的行为一致,但是在 ...@@ -277,6 +277,15 @@ uts 中比较运算符在大部分场景下和 ts 中的行为一致,但是在
| Array == Array (!= 行为相同) | [1] == [1] | 结果为 false |结果为 true,数组类型相同,元素相同就为true | | Array == Array (!= 行为相同) | [1] == [1] | 结果为 false |结果为 true,数组类型相同,元素相同就为true |
| Array === Array (!=== 行为相同) | [1] === [1] | 结果为 false |编译失败,不能比较 | | Array === Array (!=== 行为相同) | [1] === [1] | 结果为 false |编译失败,不能比较 |
`===``!==`,本意是内存地址相同,即不仅值相同,并且是同一份对象。
但不同平台的逻辑略有差异:
- js中可以比较基础类型。swift中不可以比较基础类型,只能比较对象类型
- js中比较相同字面量会返回true,比如1===1。但kotlin由于编译优化,可能会把两个字面量映射为同一内存地址,但也可能没有触发编译优化。如果没有优化为同一内存地址,那么kotlin上1===1就会返回false。而swift不允许比较字面量。
对于运行时表示为原生类型的值(例如 Int),引用相等 (===)等价于相等(==)。
<!-- TODO @yanyilin -->
## 展开语法... ## 展开语法...
> HBuilderX 3.9+ > HBuilderX 3.9+
...@@ -549,7 +558,7 @@ b instanceof Int //true ...@@ -549,7 +558,7 @@ b instanceof Int //true
> 3.93+ (Android) > 3.93+ (Android)
await 操作符用于等待一个 [Promise](./buildin-object-api/promise.md) 兑现并获取它兑现之后的值。它只能在[异步函数](./function.md#async)中使用。 await 操作符用于等待一个 [Promise](./buildin-object-api/promise.md) 兑现并获取它兑现之后的值。它只能在[异步函数](./function.md#async)中使用。
在 HBuilderX 3.93 以下的版本或者 iOS 平台,await 不能与 [Promise](./buildin-object-api/promise.md) 一同使用,此时请分别参考:[安卓 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-android.html#_6-11-synchronized-lock-等线程同步概念-在uts里怎么写)[iOS 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-ios.html#_5-1-13-异步方法) 在 HBuilderX 3.93 以下的版本或者编译为swift时,await 不能与 [Promise](./buildin-object-api/promise.md) 一同使用,此时请分别参考:[安卓 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-android.html#_6-11-synchronized-lock-等线程同步概念-在uts里怎么写)[iOS 异步函数](https://uniapp.dcloud.net.cn/plugin/uts-for-ios.html#_5-1-13-异步方法)
```ts ```ts
async function test(): Promise<string> { async function test(): Promise<string> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册