鸿蒙开发 一 (三)、ArkTS开发实战上

ArkTS 从 TypeScript 优化而来, 但有些用法又不太一样, 在开发中, 经常会出现一些报错提示,下面我们也汇总一些常见错误,捡一些常见的整理一下

Promise 的用法:

//TypeScript 写法:private loadData() {this.loadState = LoadState.LOADINGthis.loadDataByPage(0).then((data) => {this.data = data;if (this.data.length === 0) {this.loadState = LoadState.EMPTY;} else {this.loadState = LoadState.SUCCESS;}},(error) => {this.loadState = LoadState.FAIL;})}//ArkTS 写法:private loadData() {this.loadState = LoadState.LOADINGthis.loadDataByPage(0).then((data) => {this.data = data;if (this.data.length === 0) {this.loadState = LoadState.EMPTY;} else {this.loadState = LoadState.SUCCESS;}}).catch((error: BusinessError) => {this.loadState = LoadState.FAIL;})}

显式初始化类的属性

//TypeScript 写法
class Person {name: string // undefinedsetName(n: string): void {this.name = n}getName(): string {// 开发者使用"string"作为返回类型,这隐藏了name可能为"undefined"的事实。// 更合适的做法是将返回类型标注为"string | undefined",以告诉开发者这个API所有可能的返回值的类型。return this.name}
}let buddy = new Person()
// 假设代码中没有对name的赋值,例如没有调用"buddy.setName('John')"
buddy.getName().length; // 运行时异常:name is undefined//ArkTS
class Person {name: string = ''setName(n: string): void {this.name = n}// 类型为"string",不可能为"null"或者"undefined"getName(): string {return this.name}
}let buddy = new Person()
// 假设代码中没有对name的赋值,例如没有调用"buddy.setName('John')"
buddy.getName().length; // 0, 没有运行时异常//或者
class Person {name?: string // 可能为undefinedsetName(n: string): void {this.name = n}// 编译时错误:name可能为"undefined",所以不能将这个API的返回类型标注为"string"getNameWrong(): string {return this.name}getName(): string | undefined { // 返回类型匹配name的类型return this.name}
}let buddy = new Person()
// 假设代码中没有对name的赋值,例如没有调用"buddy.setName('John')"// 编译时错误:编译器认为下一行代码有可能访问"undefined"的属性,报错
buddy.getName().length;  // 编译失败buddy.getName()?.length; // 编译成功,没有运行时错误
ArkTS中禁止使用any类型
// 不支持:
let res: any = some_api_function('hello', 'world');
// 支持
let res: CallResult = some_api_function('hello', 'world');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 Q1企业级SSD市场暴涨,国产努力追赶!

在2024年第一季度,由于对高容量存储需求的激增,企业级固态硬盘(SSD)市场的收入实现了显著增长,达到了37.58亿美元,与上一季度相比增长了62.9%。这一增长主要得益于供应商减产导致的高容量订单需求未得到满足…

大模型高级 RAG 检索策略之混合检索

古人云:兼听则明,偏信则暗,意思是要同时听取各方面的意见,才能正确认识事物,只相信单方面的话,必然会犯片面性的错误。 在 RAG(Retrieval Augmented Generation)应用中也是如此&…

LeetCode 算法:合并区间c++

原题链接🔗:合并区间 难度:中等⭐️⭐️ 题目 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰…

Nginx编译安装+nginx模块

一、I/O模型 处理高并发的时候用 1.1I/O模型简介 同步/异步(消息反馈机制):关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。 同步:synchronous,…

java第二十课 —— 面向对象习题

类与对象练习题 编写类 A01,定义方法 max,实现求某个 double 数组的最大值,并返回。 public class Chapter7{public static void main(String[] args){A01 m new A01();double[] doubleArray null;Double res m.max(doubleArray);if(res !…

探索Linux中的`tree`命令:目录结构的可视化利器

探索Linux中的tree命令:目录结构的可视化利器 在Linux系统中,管理文件和目录结构是一项日常任务。当我们需要快速查看目录的层次结构时,tree命令无疑是一个强大而直观的工具。本文将详细介绍tree命令的功能、用法以及一些实用的选项。 一、…

Mysql8安装教程与配置(超详细图文)

MySQL 8.0 是 MySQL 数据库的一个重大更新版本,它引入了许多新特性和改进,旨在提高性能、安全性和易用性。 1.下载MySQL 安装包 注:本文使用的是压缩版进行安装。 (1)从网盘下载安装文件 点击此处直接下载 &#…

JavaWeb3 Ajax+Axios+Element+Nginx部署

Ajax 异步JS和XML 1.数据交换&#xff1a;给服务器发送请求&#xff0c;并获取服务器相应的数据 2.异步交互&#xff1a;在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页 同步与异步 原生Ajax <!DOCTYPE html> <html> <body><…

卷积池化尺寸计算公式

卷积层[Conv]&#xff1a; 卷积CNN是我们最常使用的&#xff0c;但是有时候需要观察他的输出前后的差异&#xff0c;这里描述下计算方式&#xff0c;具体如下&#xff1a; 图片大小&#xff1a;WxHxD W:宽 H:高 D:通道&#xff08;RGB&#xff09; 例:320x320x3 卷积核&…

Android——热点开关演讲稿

SoftAP打开与关闭 目录 1.三个名词的解释以及关系 Tethering——网络共享&#xff0c;WiFi热点、蓝牙、USB SoftAp——热点(无线接入点)&#xff0c;临时接入点 Hostapd——Hostapd是用于Linux系统的软件&#xff0c;&#xff0c;支持多种无线认证和加密协议&#xff0c;将任…

后端开发面经系列 -- 同程旅行C++一面

同程旅行C一面 公众号&#xff1a;阿Q技术站 文章目录 同程旅行C一面1、sizeof与strlen的区别&#xff1f;2、运算符和函数有什么区别&#xff1f;3、new和malloc&#xff1f;4、内存泄漏与规避方法&#xff1f;5、悬空指针与野指针&#xff1f;6、手撕冒泡排序&#xff1f;7、…

Java集合的迭代操作,Set Map接口以及工具类方法

1、集合元素迭代 1.1 集合元素遍历 集合的遍历&#xff1a;把集合中的每一个元素获取出来 使用for遍历 使用迭代器遍历 Iterator表示迭代器对象&#xff0c;迭代器中拥有一个指针&#xff0c;默认指向第一个元素之前&#xff0c; . boolean hasNext()&#xff1a;判断指针后是…

硬件调试记录——ESD保护电路

ESD保护电路&#xff0c;测试其是否已经烧坏&#xff0c;用万用表二极管功能来测试. ESD电路表现出二极管特性&#xff0c;正向电压比反向电压高0.5v~0.7v

任务3.7 开发名片管理系统

本实战项目以Java语言为基础&#xff0c;精心打造了一个功能全面的名片管理系统。系统采用面向对象的设计原则&#xff0c;通过Card类来封装每张名片的详细信息&#xff0c;如姓名、单位、职位和联系电话等&#xff0c;并提供了标准的访问器和修改器方法以确保数据的安全访问。…

回溯算法全排列

给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 这里需要用到一个数组来判断&#xff0c;数…

ROS学习记录:自定义消息类型

前言 当我们需要传输一些特殊的数据时&#xff0c;且官方的消息包无法满足需求&#xff0c;我们便可以自己定义一个消息类型。 实验步骤 一、在终端输入cd ~/catkin_ws1/src进入工作空间中src目录 二、输入catkin_create_pkg qq_msgs roscpp rospy std_msgs message_generati…

windows10子系统wsl ubuntu22.04下GN/ninja环境搭建

打开windows10子系统 ubuntu22.04 ubuntu22.04: 首先需要 安装ninja $sudo apt install ninja-build $ ninja --version 1.10.0 安装clang $sudo apt install clang $clang --version Ubuntu clang version 14.0.0-1ubuntu1.1安装gn Github: https://github.com/timniederh…

Python - tuple

声明tuple >>> a (3) >>> type(a) <class int> >>> b 3 >>> type(b) <class int> >>> c (3,) >>> type(c) <class tuple> 元组中只有一个元素时&#xff0c;应该在元素后面追加一个半角的英文逗…

SDXL终于有了足够好的 Openpose 和 Scribble 模型可以使用了。

SDXL终于有了足够好的 Openpose 和 Scribble 模型可以使用了。 xinsir 发布的Openpose 和 Scribble 模型质量相当好&#xff0c;尤其是 Openpose。不过只支持姿态不支持面部。 再加上前几天的 Anyline 线条预处理器和 Canny 模型。SDXL 的生态在发布快一年的时候成熟了。 模…

太阳能语音警示杆在户外的应用及其作用

一、太阳能语音警示杆的主要应用领域 交通管理&#xff1a;在城市道路、乡村公路、高速公路等交通要道&#xff0c;太阳能语音警示杆可以用于提醒驾驶员注意前方路况、减速慢行或者避让施工区域。例如&#xff0c;在临时施工路段&#xff0c;警示杆可以播放“前方施工&#xf…