当前位置: 首页 > news >正文

鸿蒙开发 一 (三)、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.lryc.cn/news/365392.html

相关文章:

  • TensorRT教程(1)初探TensorRT
  • 多表连接查询和子查询
  • 数据挖掘与机器学习——聚类算法
  • QT快速下载
  • 最短路问题
  • spark MLlib 中的分类模型
  • 24上半年报考人数“不增反降”?备考下半年软考的难了......
  • 初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】
  • js平滑滚动元素使其可见
  • TP6 事件绑定、监听、订阅
  • SpringCloud Gateway中Filters详细说明
  • 力扣2156.查找给定哈希值的子串
  • 推荐低成本低功耗的纯数字现场可重构IC
  • 解决change事件与blur事件互不影响
  • 后端开发面经系列 -- 同程旅行C++一面
  • 推荐几个开源的c#的工作流引擎组件
  • 视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述
  • 【JavaScript脚本宇宙】瞬息万变:探索实时Web应用的JavaScript库
  • Java数据结构与算法(有向无环图)
  • QuanTA: 一种新的高秩高效微调范式
  • 【漏洞复现】用友NC downCourseWare 任意文件读取漏洞
  • 度安讲 | 第二期「安全左移·业务护航」技术沙龙成功举办
  • 代码片段 | Matlab三维图显示[ R T 0 1] 的最佳方法
  • 2024百度之星 跑步
  • 【git】TortoiseGitPlink Fatal Error 解决方法
  • 行心科技|中科利众:健康科技新合作,营养与科技融合前行
  • Xcode 打包报错Command PhaseScriptExecution failed with a nonzero exit code
  • 使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单
  • oracle trim 函数很慢,加trim以后执行超慢,执行计划求解
  • 【Leetcode Python】