uts-for-harmony.md 2.4 KB
Newer Older
1 2
## uts for harmonyOS

W
wanganxp 已提交
3 4 5 6 7 8 9 10 11 12 13
鸿蒙系统有很多原生API,这些API通过ArkTS来调用。

由于uts可以编译为ArkTS,所以uts可以调用鸿蒙的所有原生API。

如需在uni-app中使用,就需要把鸿蒙的原生API封装为uts插件,然后在uni-app中使用。

这些uts插件,是同时兼容uni-app和uni-app x的。

但目前仅uni-app支持鸿蒙next,uni-app x还需过段时间。

uni-app中开发者的逻辑是编译为js,js无法直接调用鸿蒙原生API。而uts插件是编译为ets文件,所以可以调用鸿蒙原生API。(ArkTS的文件后缀为.ets)
14 15 16

## 1 了解 UTS 插件是什么

W
wanganxp 已提交
17
UTS 插件是 uni-app 扩展API的标准插件形式 [详情](./uts-plugin.md)
18

W
wanganxp 已提交
19
uts插件在编译到harmonyOS端时会被编译成ArkTs代码。因此编写代码时应注意遵循 `uts规范``ets规范`
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

## 2 掌握UTS语法及ArkTs语法

无论是uts还是arkTs都是在ts的语法基础上进行扩展来的。建议先阅读如下文档

- [typescript官方文档](https://www.typescriptlang.org/zh/docs/)
- [uts语法](https://doc.dcloud.net.cn/uni-app-x/uts/)
- [AtkTs约束](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/typescript-to-arkts-migration-guide-0000001820879565)

## 3 harmonyOS 原生环境配置

- 参考:[uni-app 开发鸿蒙应用](https://uniapp.dcloud.net.cn/tutorial/harmony/dev.html)

## 4 ArkTs 与 UTS 差异重点介绍 (持续更新)

### 类型差异

#### any类型

ArkTs内不能使用any类型,但是uts内any用处比较多,因此在编译为ArkTs时,any类型被转为了ESObject这个ArkTs特有的类型。

#### 对象字面量

ArkTs不允许无类型的对象字面量,编写代码时应注意为对象字面量指定类型

```ts
// 错误用法
const obj = {
  a: 1
}

// 正确用法
interface Obj {
  a: number
}
const obj: Obj = {
  a: 1
}
W
wanganxp 已提交
58
//或
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
const obj = {
  a: 1
} as Obj
```

## 5 常见问题

### context的获取

很多鸿蒙原生接口需要传入context作为参数。多数情况下可以直接调用鸿蒙全局方法`getContext()`获取。例如:

```ts
import settings from '@ohos.settings';
const context: Context =  getContext();
settings.getValue(context, settings.display.SCREEN_BRIGHTNESS_STATUS, (err, value) => {
  if (err) {
    console.error(`Failed to get the setting. ${err.message} `);
    return;
  }
  console.log(`SCREEN_BRIGHTNESS_STATUS: ${JSON.stringify(value)}`)
});
```