本文概述
- ArkTS 是在TypeScript 的基础上加上鸿蒙特性,而TypeScript 又是在JavaScript 的基础上演变而来的。因此,TypeScript 和JavaScript 也是需要了解的
TypeScript 语言补充
在线调试环境:
-
TypeScript 在线运行环境一:
https://www.typescriptlang.org
- 不要在网页上写太多代码,这个网站会卡死的
TS 语言基础
Any 类型
-
概述:Any 表示不确定的类型,所以可以存储所有类型
-
使用场景:
-
不推荐:将其用作变量类型
- 这样搞成跟JS 一样的弱类型语言了
-
推荐:在定义方法行为的时候:入参、返回值;
- 这时候才考虑使用Any,体现出它的包容性及扩展性
-
-
代码展示:
let nameInfoDis: any = "WAsbry"//不推荐将变量声明为any 类型 let nameInfo: string = "WAsbry"//推荐写法
数组类型:
-
基本概述:
- 有两种声明方式,且索引从0 开始。
-
代码展示:
//数组声明:两种方式等价 let phonesA: Array<string> = ['xaiomi','huawei'] let phonesB: string[] = ['xiaomi','huawei'] console.log(phonesA[0] + "--" + phonesA[1])//数组取值
等号问题
-
基本概述:
- 最好写三个等号,两个等号,低版本内部会将 == 两端的值先进行转换后面才判断,一个是浪费性能,还有数据可能失真(类型发生变化)
-
代码展示
let testNumber = 16 if(testNumber % 2 === 0){//最好写三个等号,两个等号,低版本内部会将 == 两端的值先进行转换后面才判断,一个是浪费性能,还有数据可能失真(类型发生变化) console.log("确实是偶数") }
条件控制:if-else
-
基本概述:与C/C++ 非0即true 不同,ts 中将
空/null/0/undefined
判断为false,其余情况均为 true -
代码展示:
//=========C/C++ 非0即true let data: any data = 0 if(data){//如果data 此时为空/null/0/undefined,此处会将data 判断为false,其余情况就是true console.log("数据存在") }else{ console.log("数据不存在") }
条件控制:Switch - case
-
代码展示:类似其他编程语言
//=====switch-case ,注意这个东西的写法 let strValue: string = '' switch(strValue){ case 'S': { console.log("绩效是S") break } case 'A': { console.log("绩效是A ") break } default: { console.log("不在认知内") } }
条件控制:For 循环
-
基本概述:在遍历数组时,可以去那数组下标,可以去拿数组元素
-
代码展示
//Java 式的写法 for(let i = 0;i < 3;i++){ console.log("这是第 " + i + " 次打印") } let cnt = 0; while(cnt < 3){ console.log("while 循环了 " + cnt + "次") } //可以认为TS 集百家之长 let phones: string[] = ['HUAWEI',"XIAOMI"] for(const i in phones){//使用in 关键字,拿到数组元素下表,可借此拿到元素 console.log("第 " + i + " 部手机 = " + phones[i]) } for(const phone of phones){//使用of 关键字,拿到数组元素本身 console.log("这次拿到的手机 = " + phone) }
函数部分
-
函数定义
//函数跟Kotlin 有点像 function showNameInfo(name: string) : void{ console.log("name = " + name) } function addTwoNum(numberA: number,numberB: number) : number{ return numberA + numberB } console.log("两数相加:" + addTwoNum(2,3))
-
箭头函数
- 箭头函数 跟 Kotlin 里面的lamda,es6 箭头函数等类似
- 箭头函数的返回类型,若没有显示给出,那就是void
let showName = (name: string) => { console.log("箭头函数:name = " + name) } showName("WAsbry") let result = () => { console.log("带返回值的箭头函数") return true } let res: boolean = result() console.log("带返回类型的箭头函数的返回值:res = " + res)
-
函数传参:支持参数省略及默认参数
//函数传参的细节 function showNameAction(name ? : string){ name = name ? name : "Default" console.log(name) } showNameAction() showNameAction("WAsbry") //还支持函数的默认参数 function functionDefaultParma(name : string = "default"){ console.log(name) } functionDefaultParma()
TS 对象部分
-
定义对象:
//TS对象:有点像Python 里面的键值对 let emptyObj = {}//定义空对象 let student = {name: "WAsbry",age: 23} console.log(student.name + "--" + student.age)//对象取值 console.log(student['name'] + "--" + student['age'])//对象取值
TS 面向对象实操一
-
枚举类型 + 接口 + 类 + 对象多态
//枚举类型 enum Action{//枚举类型默认值为0,1,2,3 OPEN = '设备打开', CLOSE = '设备关闭' } //定义接口:在方法或类里面不需要写let function,反之,就要写 interface IUSB{ insertUSB() : void deleteUSB() : void } //定义类 class KeyBoard implements IUSB{ insertUSB() : void{ console.log(`键盘${Action.OPEN}`) } deleteUSB() : void{ console.log(`键盘${Action.CLOSE}`) } } class Mouse implements IUSB{ insertUSB() : void{ console.log(`鼠标${Action.OPEN}`) } deleteUSB() : void{ console.log(`鼠标${Action.CLOSE}`) } } //多态 let iusb1: IUSB = new Mouse() iusb1.insertUSB() iusb1.deleteUSB() let iusb2: IUSB = new KeyBoard() iusb2.insertUSB() iusb2.deleteUSB()
-
运行结果:
TS 面向对象实操二
-
代码展示:
class RectangleClass{ private mWidth: number private mHeight: number //在构造方法里面赋值 public constructor(w: number,h: number){ this.mWidth = w; this.mHeight = h; } public calculatedArea(): number{ return this.mWidth * this.mHeight; } } //定义一个正方形,宽高同值 class SquareClass extends RectangleClass{//拥有父类的所有能力,再扩展出子类的能力(正方形) constructor(wh: number){ super(wh,wh) } } let squareObj = new SquareClass(5); console.log("squareObj 的面积 = " + squareObj.calculatedArea()) let sq : RectangleClass = new SquareClass(5) console.log("多态做法 squareObj 的面积 = " + squareObj.calculatedArea())
-
运行结果: