ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。
当前,ArkTS在TS的基础上主要扩展了如下能力:
他们的关系如图所示:
如果是前端研发掌握起来无压力, 如果是其他方向的研发, 大约需要半个月左右的时间去掌握, 当然如果想更加深入的掌握TypeScript则需要掌握JavaScript ,而JavaScript 初步掌握需要的时间大约在 一个月左右, 深入掌握因人而异, 可能是三个月也可能是半年
只有 true 和 false 两个值。
// let 变量名:数据类型 = 值
let flag:boolean = true
console.log('布尔类型:', flag);
所有数字都是浮点数,类型是number类型,可以表示十进制、二进制、八进制、十六进制
// 数字类型
let a1:number = 10 // 十进制
let a2:number = 0b010 // 二进制
let a3:number = 0o12 // 八进制
let a4:number = 0xa // 十六进制
console.log('数字类型:', `a1=>${a1}, a2=>${a2}, a3=>${a3}, a4=>${a4}`);
表示文本数据,可以使用单引号或双引号来定义。
// 字符串类型 ---> string
let str1:string = '待到秋来九月八'
let str2: string = '我花开后百花杀'
console.log(`字符串类型 :${str1}, ${str2}`);
注意问题:数组定义后,里面的数据的类型必须和定义数组的时候的类型是一致的,否则有错误提示信息,也不会编译通过的
// 数组定义方式1
// 语法: let 变量名:数据类型[]=[值1,值2,值3]
let arr1:number[] = [10,20,30,40]
// 数组定义方式2:泛型的写法
// 语法: let 变量名:Array<数据类型> = [值1, 值2, 值3]
let arr2:Array<number> = [10,20,30]
console.log(`方式1:${arr1} , 方式2:${arr2}`);
注意问题:元组类型在使用的时候,数据的类型的位置和数据的个数 应该和在定义元组的时候的数据类型及位置应该是一致的
// 元组类型: 在定义数组的时候,类型和数据的个数一开始就已经限定了
let arr3:[string,number,boolean] = ['若城',30,false]
console.log(arr3);
enum 类型是对 JavaScript 标准数据类型的一个补充。 使用枚举类型可以为一组数值赋予友好的名字。。
// 枚举类型: 枚举里面的每个数据值都可以叫元素, 每个元素都有自己的编号,编号是从0开始的,依次的递增加1
enum Color{
red,
green,
blue,
}
// 定义一个Color 的枚举类型的变量来接收枚举的值
let color:Color = Color.red
console.log(color); // 0
console.log(Color.red, Color.green, Color.blue); // 0,1 ,2
console.log(Color[2]); // blue
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any 类型来标记这些变量
// any 类型
let str:any = 100
str = '黑夜给了我黑色的眼睛, 我却用它寻找光明!'
console.log(str);
let arr:any[]=[100, 'who are you?', false]
console.log(arr);
某种程度上来说,void 类型像是与 any 类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是 void
// void 类型, 在函数声明的时候小括号后面使用:void , 表示的是该函数没有任何的返回值
function showMsg():void{
console.log('void 指的是没有返回类型');
}
console.log(showMsg());
object 表示非原始类型,也就是除 number,string,boolean之外的类型。使用 object 类型,就可以更好的表示像 Object.create 这样的 API
// 定义一个函数, 参数是object 类型, 返回值也是object 类型
function getObj(obj: object): object{
console.log(obj);
return {
name:'若城',
gender:'男'
}
}
console.log(getObj({name:'卡卡西', gender:'男'}));
在TS中,这两个类型不同
undefined 和 null 都可以作为其他类型的子类型, 把undefined 和 null 赋值给其他类型的变量 , 例如: :number类型的变量
// undefined && null
let und:undefined = undefined
let nul: null = null
console.log(und, nul);
//undefined 和 null 都可以作为其他类型的子类型, 把undefined 和 null 赋值给其他类型的变量 , 例如: :number类型的变量
let num2:number = undefined
let num3:number = null
console.log(num2, num3);
联合类型(Union Types)表示取值可以为多种类型中的一种 需求1: 定义一个一个函数得到一个数字或字符串值的字符串形式值
let stringOrNumber: string | number;
stringOrNumber = 'hello';
stringOrNumber = 100;
需求2: 定义一个函数得到一个数字或字符串值的长度
function getStringLength(str:number|string): number{
return str.toString().length
}
console.log(getStringLength('众里寻他千百度,蓦然回首那人却在灯火阑珊处'));
通过类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”。 类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。 TypeScript 会假设你,程序员,已经进行了必须的检查。 类型断言有两种形式:
function getStringLength(str:number|string): number{
// return str.toString().length
if ((<string>str).length) {
return (<string>str).length
}else{
return str.toString().length
}
}
console.log(getStringLength('众里寻他千百度,蓦然回首那人却在灯火阑珊处'));
function getStringLength(str:number|string): number{
// return str.toString().length
if ((str as string).length) {
return (str as string).length
}else{
return str.toString().length
}
}
console.log(getStringLength('众里寻他千百度,蓦然回首那人却在灯火阑珊处'));
类型推断: TS会在没有明确的指定类型的时候推测出一个类型 有下面2种情况: 1. 定义变量时赋值了, 推断为对应的类型 2. 定义变量时没有赋值, 推断为any类型
// 类型推断
let txt = 100
console.log(txt);
let txt2;
txt2 = 100
txt2 ='1233'
console.log(txt2);