TS的快速入门(HarmonyOS学习第一课)

快速入门


学习TypeScript 对于Harmony0s,应用开发至关重要。在Harmonyos 中,主力编程语言为 ArKTS,它是基于 TypeScript 的一种语言,其通过与ArkUI 框架的匹配,拓展了声明式UI和状态管理等能力,使开发者能够以更简洁自然的方式开发跨应用。Typescript 本身是 Javaseript 的超集,通过引入静态类型定义等特性,提高了代码的可维护性和可读性,有助于在编码阶段检测潜在错误,提高开发效率另外,学习Typeseript还为处理Harmenyos 应用中的 UI 和应用状态提供了更强大的支持,在并发任务方面也有相应的扩展。为更好地对HarmonyOs进行开发需要掌握Typescript语言,本接我们重点介绍TypeScript 语言。


基本类型使用:


```

//定义boolean类型变量

let isOff= true

let isOn =false

console.log(isOff)

console.log(isOn)

//定义数字类型的变量

let a : number =12

let b : number =3.1415926

//二进制

let c : number =0b1100

console.log(c)

//定义字符串类型/数组类型

let aStr = "hello"

//数组类型

//第一种

let arr1 : number[]=[1,2,3,4,5,6,7]

console.log(arr1)

console.log(arr1[0])

//第二种

let arr2: Array<string>=["a","b","c"]

console.log(arr2)

//对数据组最后进行添加操作

arr2.push("hello")

arr2.push("he")

console.log(arr2)

//删除数组最后面一个数据

arr2.pop()

console.log(arr2)

//在数组任意位置进行添加或者是删除

//arr2.splice("下标","0=添加,1=删除","内容")

arr2.splice(2,0,"native")

console.log(arr2)

```

元组的使用:


```

//元组

let t1:[string,number]

t1 = ['hello',100]

//需要按照let t1:[string,number] 设定的内容进行添加,否则报错

console.log(t1)

console.log(t1[0])

//枚举

//enum 类型是对Javascript 标准数据类型的一个补充,

// 使用枚举类型可以为一组数值赋予友好的名字。例如我们这里定义Color为Red,

// Green和Blue,到时候就可以使用 Coler.Green 来定义颜色。

enum sex{

    MAIL="男",

    NU="女",

}

let a:sex=sex.MAIL

let b:sex=sex.NU

console.log(a)

console.log(b)

```

Unknown

enum 类型是对Javascript 标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。例如我们这里定义Color为Red,Green和Blue,到时候就可以使用 color.Green 来定义颜色。

```

//定义未知类型

//之后可以进行任意类型赋值

let  show : unknown;

show=4;

show="hello";

show=false;

//viod : 函数没有返回值

function  myFunc(): void{

    console.log("执行函数,没有返回值")

}

myFunc()

//Null undefined

// console.log(efg)

let n =null

let m =undefined

//联合类型

//定义变量可以是字符串也可以是数值。

let myF : string | number = 100

// let myF : string | number = "hello"

```

TS条件语句


if语句

```

//最简单的if语句

let age : number =60

if (age >= 18 && age<=20){

    console.log("已经成年")

}else if(age>=18 && age<=60){

    console.log("中年")

}else{

    console.log("老年")

}

```

使用swith进行判断(多条件的等于判断)

```

let gender= "MAIL"

switch(gender){

    case  "MAIL" :{

        console.log("男")

        break;

    }

        case  "FEMAIL" :{

        console.log("女")

        break;

    }

    default:{

        console.log("不能确定")

        break;

    }

}

```

循环语句

```

//循环

//for循环

//第一种

// let i:number;

// for( i = 1;i<=10 ;i++ ){

//    console.log(i)

// }

//第二种

// let j :any; //Any为任意类型

// let nums : Array<number>=[10,11,12]

// for (j in nums){

//    console.log(nums[j])

// }

```

函数


函数

是一组一起执行一个任务的语句,函数声明要告诉编译器函数的名称、返回类型和参数。Typescript可以创建有名字的函数和匿名函数

```

//普通函数

//定义一个普通函数 :number返回值

function add(x:number,y:number):number{

    return x + y

}

//函数调用

let result:number =add(10,29)

console.log(result)

//匿名函数(老版本)

let add_func =function (x:number,y:number){

    return x + y

}

console.log(add_func(10,20))

//定义一个可选参数

function text1(x:number,name?:string):void{

  console.log(x,name)

}

text1(10)

function text2(x:number,name?:string):void{

  if(name){

    console.log(x,name)

}else{

    console.log(x)

}

}

text2(10)

//剩余函数

function text3(x:number,...other:Array<string>):void{

    console.log(x)

    if(other.length == 0){

        console.log("剩余参数没有传")

    }else{

        let i :any;

        for (i in other){

            console.log(other[i])

        }

    }

}

text3(20)

```

箭头函数

ES6版本的TypeScript提供了一个箭头函数,它是定义匿名函数的简写语法,用于函数表达式,它省略了函数关键字。箭头函数的定义如下,其函数是一个语句块


其中,括号内是函数的入参,可以有0到多个参数,头后是函数的代码块。我们可以将这个箭头函数赋值给一个变量,如下所示


```

//箭头函数

let let1=(x:number,y:number)=>{

    return x + y

}

console.log(let1(1,2))

```


Typescript 支持基于类的面向对象的编程方式,定义类的关键字为class,后面紧跟类名。类描述了所创建的对象共同的属性和方法。

```

//类实例

//定义一个类

//private 私有属性

//public 公有属性

class Person{

    private name:string

    private age :number

    //定义构造函数(方法)

    constructor(name:string,age:number){

        this.name = name

        this.age =age

    }

    //公共成员函数

    public getPersonInfo() :string{

      return `我的名字是:${this.name} ,年龄 ${this.age}`

    }

}

//构造Person类的实例

//使用new方法传入

let p=new Person ("张三",27)

console.log(p.getPersonInfo())

```

继承


继承就是子类继承父类的特征和行为,使得子类具有父类相同的行为。Typescript中允许使用继承来扩展现有的类,对应的关键字为extends。如下案例中,我们定义employee 是继承于person的employee l person 新增了一个属性 department,我们可以这样去定义它的构造方法,通过super 关键字实际上就调用了person 中的构造方法,初始化name和age,并在构造方法中初始化好了department,employee有个公有方法,getemployeeinfo 获取雇员的信息,其中调用 getpersoninfo 来获取雇员的姓名、年龄信息

```

//类实例

//定义一个类

//private 私有属性

//public 公有属性

//protected 表示在一个包里面都可以使用

class Person{

    private name:string

    private age :number

    //定义构造函数(方法)

    constructor(name:string,age:number){

        this.name = name

        this.age =age

    }

    //公共成员函数

    public getPersonInfo() :string{

      return `我的名字是:${this.name} ,年龄 ${this.age}`

    }

}

//构造Person类的实例

//使用new方法传入

let p=new Person ("张三",27)

console.log(p.getPersonInfo())

//继承

//定义一个类继承Person

//extends

class Employee extends Person {

  private department :string;

  constructor(name:string,age:number,department:string){

    //super() 调用父类的构造函数

    super(name,age)

    this.department=department

    //department 子类新定义的

  }

  //定义属于子类自己的构造函数

  public getEmpInfo(): string{

        return this.getPersonInfo()+`,我工作的部门是:${this.department}`

  }

}

let emp=new Employee("王五",22,"行政")

console.log(emp.getEmpInfo())

console.log(emp.getPersonInfo())

```

模块


随着应用越来越大,通常要将代码拆分成多个文件,即所谓的模块(module)。模块可以相互加载,并可以使用特殊的指令export和import来换功能,从另一个模块调用一个模块的函数。

两个模块之间的关系是通过在文件级别上使用import和export建立的。模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用export导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。

首先在src文件夹下新建




在终端编译TS命令

//编译ts文件命令:tsc "文件名"

完成后效果:


编译完成之后,在终端就可以使用node执行编译后的js文件

//编译ts文件命令:node "文件名"


可迭代对象


一个对象实现了 Symbol.iterator属性时,我们认为它是可迭代的。一些内置的类型如Array,Map, Set,string,Int32Array,Uint32Array等都具有可迭代性。

```

//可迭代性 ,可迭代对象

let str1:any = "adadadada"

// console.log(str1[Symbol.iterator])

// for...of 遍历可迭代对象中每一个元素  i 代表其中一个元素

// for...in 遍历可迭代对象中每一个元素  i 代表其中一个元素的下标

for (let i of str1){

    console.log(i)

}

for (let j in str1){

    console.log(j)

}

//map类型 :每个元素都有两个元素组成:key,value

let map1=new Map<string,number>()

map1.set('a',1)

map1.set('name',12)

map1.set('age',10)

for (let k of map1){

    console.log(k[1])

}

```

















©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容