鸿蒙系统ArkTs语法入门

鸿蒙系统ArkTs的ts语法入门

  • 前言
  • 1. 变量声明
  • 2. 数据类型
    • 2.1 基本数据类型
    • 2.2 复杂数据类型
    • 2.3 联合类型
    • 2.4 空类型和未定义类型
  • 3. 函数
    • 3.1 匿名函数和箭头函数
  • 4. 类和接口
      • 类的访问权限
      • 接口
      • 类的继承
      • 内部类
  • 7. 结构体
  • 参考材料

前言

  1. 每个语言都有控制流语句就不写测试代码了。
  2. arkTs绝大部分语法继承自ts,然后有些许的语法特性变化,这部分我也会在入门的时候一并记上。
  3. 我之前学过java,所以这不是零基础,至少需要会一种编程语言。

代码自测方式:

  1. 新建一个鸿蒙App项目,然后开一个设置按钮进行测试
  2. 没有条件的话,https://www.runoob.com/try/runcode.php?filename=ts-hw&type=typescript可以在线测试编程代码。

1. 变量声明

  • var:传统声明方式,作用域在函数内部,不过arkTs不让使用var方式,所以我们一般都用let
  • let:块级声明方式,作用域在代码块内部
  • const:常量,声明之后不可以修改
类型作用域定义后能否修改arkts支持
var方法/类内部
let代码块内部
const代码块内部
function a() {{let a: number = 10console.log(a + "") // 正常输出}//console.log(a) // 报错,超过了作用域{var b: number = 10 // arkTs时会编译报错,ts无影响console.log(b + "") // 正常输出}console.log(b + "") // 正常输出{const c: number = 10//c = 20 // 报错,常量不能被修改console.log(c + "")}//console.log(c + "") // 报错,访问不到c
}
a()
//console.log(b + ""); // 报错,访问不到b

2. 数据类型

2.1 基本数据类型

类型名称说明arkts支持
any任意类型不用管他,arkTs不支持该类型
number数字类型就是双精度类型,也就是java的double
ts语言没有整型,只有这个数字类型
string字符串类型typeScript的字符串用单引号和双引号都可以,没有强制要求
可以用反引号使用表达式
boolean布尔类型
// 数字测试
let a: number = 0.1
let b: number = 1/3
let c: number = 0
console.log(a)
console.log(b)
console.log(a/c)//字符串测试
let str1: string = "111"
let str2: string = '222'
let words: string = `${ str1 } , ${ str2 + 1}`
console.log(words)//boolean测试
let b1: boolean = false
console.log(b1)
//console.log(b1+1) //无法当成数字处理
console.log(`${b1}`)

2.2 复杂数据类型

数组:相同类型数据的集合

//数组
let arr1: number[] = []
arr1[0] = 1
arr1[10] = 2
console.log(arr1)
console.log(arr1[5])
arr1[10] = undefined
console.log(arr1[10])
console.log(arr1

元组:不同类型数据的集合,当我们要往数组里面存入不同类型的数据的时候就用元组
元组有两种,一种是在定义的时候就指明数据的所有类型;另一种则是不指明,这样就可以随意的存入任意类型的数据。

// 定义的时候就指定string和number类型
// let x:[string, number]
let x = ['Runoob', 1] // 是上面声明写法的简写,在声明的同时实例化
//x[5] = false // 编译无法通过
x[10] = 'hello world'
console.log(x);// 定义的时候不指明类型,可以随意存入数据
let y = []
y[0] = 2
y[1] = 'aa'
y[2] = false
console.log(y)

2.3 联合类型

就是将一个变量同时声明成多种类型,当不确定一个对象具体应该为哪种类型的时候使用联合类型进行声明

let a:string|number = 3
let b = 4
console.log(a+b)
a = 'aa'
if(typeof a == 'string') {console.log(a+b)
} else {console.log(a/b) //非数字无法进行除法,这一行编译无法通过
}

实际的用法一般有:

  1. 对于一个方法的入参,他可能是一个对象,也可能是一组对象,这个时候用联合类型声明如string|string[]。效果同java的可变入参
  2. 对于某个要用到的对象,无法确定他的实际类型,但是在arkts又不能使用any的情况下,将其声明为可能出现的对象类型。再到需要使用的时候通过instanceof来区分处理。

2.4 空类型和未定义类型

在TypeScript中所有的类型都可以被赋值为空类型null,赋值为空类型时可以和其他同类型对象进行运算,但是无法调用这个对象内部本身的方法,会报空指针异常。
undefined也是同理,当 声明一个对象但是没有赋值的时候他的值就是undefined,使用起来的效果和null是一样的,就不写代码演示了。

let a:number = null
a = 3
a = null
console.log(a + "")  // null
console.log(a+2 + "") // 2,在计算时null被当成0
console.log(a*2 + "") // 0

let b:boolean = null
if (b == true) {console.log(b + ", true")
} else  if (b == false) {console.log(b + ", false")
} else {console.log(b, ", null") //在做if判断时null既不是true,也不是false
}
let c:string = null
console.log(c)
//console.log(c.length + "") //空对象报错
c = c + "aa"
console.log(c) // 在做字符串运算时,c被当成"null"这个字符串
console.log(c.length + "") // 6

3. 函数

function一般用来声明一个方法,这里着重要说明的一点是,只有当一个方法需要被声明在所有的类或结构体外部时,或者他是匿名函数等没有方法名的函数时,才需要带上function关键字,一般我们在类或者接口里面声明方法的时候都是不需要带的。

这里涉及到一些定义域的关系,我不是很清楚,只作为结论记在这里。

function a(str: string): void {console.log(str)
}class b {//function c() {} //无法通过编译c(): number {return 400}
}a('aa')
let obj = new b()
console.log(obj.c())

3.1 匿名函数和箭头函数

匿名函数就是指函数没有具体的名字,而是直接声明函数的入参返回值和具体内容。

// 这里这个a不是函数的名称,而是变量的名称,所以是匿名函数
let a = function(n: number): number {return n+400
}
console.log(a(300))
//在函数定义外加上括号,后面在加上调用的括号就是自调用匿名函数
(function () { var x = "Hello!!";   console.log(x)     })()

lambda函数(箭头函数)是其更进一步的简写

let b = (n:number) => {console.log(n)
}
b(123)// 当你最后一行写上return的时候他就会制定好返回类型,没写就默认是void类型
let c = (n:number) => {return n*2
}
console.log(c(555))

4. 类和接口

类是语法中最重要的一个单位,他的一般语法如下

class A{private a: number // 类里面的成员变量在声明时必须要加上访问权限//constructor() {} //类不允许重载构造方法,只能有一个constructor(n: number) {//a = n // 无法过编译this.a = n //在方法中调用自己的成员变量时,一定要加上this}log() { console.log(a + " ") // 这里实际上指向的是下面代码中的let aconsole.log(this.a + "") //这个才是真实指向自己成员变量的a}
}let a = new A(5)
//console.log(a.a) // 没有访问权限
a.log()

类的访问权限

TypeScript的类和别的语言的类一样,类本身和里面的方法有对应的访问权限
这里需要声明一点的是,TypeScript和Java不同,它是没有本包的概念的,只有不同文件的区别,所以没有Java默认的本包访问权限

类的访问权限只有两种:仅限本文件内部的默认访问权限;可以给其他文件使用的export访问权限。
方法/成员变量的访问权限只有三种:对外开放的public;可被继承类使用的protect;仅限本类内部的private。

class A {}export class B {private a: numberpublic b: numberprivate log1() {}public log2() {}
}

接口

TypeScript也可以通过接口来约束一个实体或一个类应该拥有的一些函数

几个语法特性:

  1. 不允许设置方法的默认实现
  2. 接口的实现可以不是类而是对象。
  3. 接口内可以约束变量
interface A {num: numberlog1(): voidlog2(n: number): void
}class B implements A {num: numberlog1() {}log2(n: number) {console.log(n + "")this.num = n}
}let c: A = {num: 0,log1: function () {},log2: function (n: number) {}
}console.log(c + "") // 类型为object

类的继承

类的继承特性大体和Java一样,通过extends来继承类,通过implements来继承接口,接口可以多继承类只能单继承。

class A {log() {console.log("类A")}
}interface B {log(): void
}
interface C {
}class D extends A implements B,C {log() { // 重载父类的同名方法console.log("类D")}
}let d = new D()
d.log() //类D

内部类

内部类在声明的时候就必须同时创建对应的实例

class A {public b = {log() {console.log("匿名内部类b")}}public c = class C {log() {console.log("实名内部类C")}}//public d = new this.b 无法创建匿名内部类public d = new this.c
}let a = new A()
a.d.log()

7. 结构体

TypeScript本身是没有struct这个关键字的,但是arkTs新增了这个关键字,他一般用来声明鸿蒙的自定义组件(其实就是UI类)。
他的绝大部分语法限制和class完全一样

参考材料

从TypeScript到ArkTS的适配规则
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/typescript-to-arkts-migration-guide.md
如何在Typescript实现内部类和接口
https://www.jianshu.com/p/5a9ee0f838f6

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

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

相关文章

31 树的存储结构一

无法直接用数组表示树的逻辑结构,但是可以设计结构体数组对节点间的关系进行描述:【如表】 这样做的问题: 可以利用 组织链表 parent指针: 注意:树结点在 组织链表 中的位置不代表树的任何逻辑关系 树的架构图&#xf…

从0开始学Git指令(3)

从0开始学Git指令 因为网上的git文章优劣难评,大部分没有实操展示,所以打算自己从头整理一份完整的git实战教程,希望对大家能够起到帮助! 远程仓库 Git是分布式版本控制系统,同一个Git仓库,可以分布到不…

ubuntu主机开启ssh服务,ubuntu通过ssh访问主机

1.ubuntu通过ssh访问主机 要在Ubuntu上通过SSH(Secure Shell)访问另一台主机,您需要确保几件事情: 目标主机上的SSH服务器:确保您要访问的主机上安装并运行了SSH服务器(例如OpenSSH服务器)。 …

java客户端连接redis并设置序列化处理

1、导入依赖 <!--继承父依赖--> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup paren…

服务器出现500、502、503错误的原因以及解决方法

服务器我们经常会遇到访问不了的情况有的时候是因为我们服务器被入侵了所以访问不了&#xff0c;有的时候是因为出现了服务器配置问题&#xff0c;或者软硬件出现问题导致的无法访问的问题&#xff0c;这时候会出现500、502、503等错误代码。基于以上问题我们第一步可以先重启服…

Chapter 7 类和对象的特性(上篇)

目的&#xff1a;认识类&#xff0c;对面向对象产生认识 &#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1f4ca;&#x1…

【Py/Java/C++三种语言详解】LeetCode每日一题240114【链表】LeetCode83、删除排序链表中的重复节点

文章目录 题目链接题目描述解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目链接 LeetCode83、删除排序链表中的重复节点 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返…

Android json功能解析

1. 简介 JAVAScript Object Notation是一种轻量级的数据交换格式具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案&#xff08;有点类似于正则表达式 &#xff0c;获得了当今大部分语言的支持&#xff09;。  JSON采用兼容性很高的文本格式&#xf…

第 380 场周赛 解题报告 | 珂学家 | 数位DP 二分 + 字符串Hash

前言 整体评价 感觉T3更难些&#xff0c;T4太直接了&#xff0c;一般的KMP/StringHash基本就够用了。 上周T4出数位DP&#xff0c;估计是为T3打了一个铺垫。 A. 最大频率元素计数 思路: 模拟即可 class Solution {public int maxFrequencyElements(int[] nums) {Map<Int…

qt5.14.2配置opencv4.5.5

使用环境&#xff1a;windows&#xff0c;opencv4.5.5&#xff0c;qt5.14.2&#xff0c;msvc编译器 这里的opencv文件是已经编译好了&#xff0c;在qt工程中配置就可使用&#xff0c;编译器得是msvc才行&#xff0c;MinGW不管用。 资源地址&#xff1a;https://download.csdn.…

【深度学习每日小知识】Computer Vision 计算机视觉

计算机视觉是人工智能的一个领域&#xff0c;涉及算法和系统的开发&#xff0c;使计算机能够解释、理解和分析来自周围世界的视觉数据。这包括从静态图像到视频流甚至 3D 环境的一切。 使用对象检测和特征提取等方法&#xff0c;计算机视觉本质上需要从视觉输入中提取有用信息…

javascript,setTimeout定时器的精度可能不高,javascript引擎不是你想的那样

javascript引擎&#xff0c;它运行在宿主环境中&#xff0c;对前端来说&#xff0c;一般是web浏览器&#xff0c; 代码运行到浏览器。 专业术语: 事件循环&#xff1a;浏览器提供了一种机制来处理程序中多个块的执行&#xff0c;且执行每块时调用javascript引擎,这种机制被称为…

2023 IoTDB Summit:天谋科技高级开发工程师苏宇荣《汇其流:如何用 IoTDB 流处理框架玩转端边云融合》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

华为手机备份全过程(保姆级问题解决方案)

手机备份 前言主体信息备份一、关闭windows安全中心的内存完整性二、开启 USB 调试&#xff0c;尝试使用 ADB 连接三、开始备份 微信备份QQ备份写在最后遗留问题 前言 我的手机是荣耀 20&#xff0c;虽然不是华为&#xff0c;但系统还是鸿蒙的系统&#xff08;毕竟那阵荣耀还是…

.pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?

引言&#xff1a; 在网络安全领域&#xff0c;.pings勒索病毒一直是不断演变的威胁之一。其变种的不断出现使得对抗这一数字威胁变得更加复杂。本节将深入剖析.pings勒索病毒变种的出现&#xff0c;以更好地理解其威胁性质和对策。如果受感染的数据确实有恢复的价值与必要性&a…

reactNative0.71版本的使用

开发环境配置 参考reactNative 官网 版本选中0.71 打包配置 1. IOS 打开项目 -> 进入ios目录->执行命令 pod install ->项目名称.xcworkspace -> 使用xcode打开->配置证书 证书配置截图如下 &#x1f4a1;tips&#xff1a;TARGETS目录下会有多个文件&#x…

【ArcGIS Pro微课1000例】0057:未安装所需的Microsoft驱动程序

文章目录 一、错误提示二、解决办法1. Excel转表2. Excel转csv一、错误提示 ArcGIS Pro添加Excel数据时,提示未安装所需的Microsoft驱动程序,如下图所示: 二、解决办法 1. Excel转表 在选择输入表时,可能会提示未安装所需的 Microsoft 驱动程序。 这是因为要在 ArcGIS P…

为什么光刻要用黄光

光刻是集成电路&#xff08;IC或芯片&#xff09;制造中的重要工艺之一。简单来说&#xff0c;它是通过使用光掩膜和光刻胶在基板上复制电路图案的过程。 基板将涂覆硅二氧化层绝缘层和光刻胶。光刻胶在被紫外光照射后可以容易地用显影剂溶解&#xff0c;然后在腐蚀后&#xf…

js pop方法的使用

JavaScript的pop()方法是数组对象的方法之一&#xff0c;用于从数组的末尾删除并返回最后一个元素。它不接受任何参数。 以下是pop()方法的基本语法&#xff1a; var lastElement array.pop() 在上述语法中&#xff1a; array&#xff1a;要操作的原始数组。lastElement&…

控制网页的灰度显示

1.代码&#xff1a; 普通网页 <style>html {filter: grayscale(100%);}</style> 或是:webkit内核浏览器写法 <style>html {-webkit-filter: grayscale(100%)}</style> 2.说明&#xff1a; grayscale(amount) :进行灰度转换。 amount转换值的大小&…