「鸿蒙入门」1_TS基础语法简述

虹棠包
2024-01-10 / 0 评论 / 31 阅读 /
温馨提示:
本文最后更新于2024年01月12日,已超过480天没有更新,若内容或图片失效,请留言反馈。

一、初识ArkTS语言

ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。

当前,ArkTS在TS的基础上主要扩展了如下能力:

  • 基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。
  • 状态管理:ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。另外,从数据的传递形式来看,可分为只读的单向传递和可变更的双向传递。开发者可以灵活地利用这些能力来实现数据和UI的联动。
  • 渲染控制:ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件。数据懒加载从数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。

未来,ArkTS会结合应用开发/运行的需求持续演进,逐步提供并行和并发能力增强、系统类型增强、分布式开发范式等更多特性。

二、基本语法

(一)定义

格式:关键字 变量名:类型 = 值

  1. 关键字:varletconst

    var myname1:string = "hongtang"//不具备块限制(类似于全局变量)
    let myname2:string = "hongtang"//对应块级作用域(类似于局部变量)
    const myname3:string = "hongtang"//表示常量
  2. 类型:stringbooleannumberany

    let mystring:string = "hongtang"//仅能存储字符串
    let mybool:boolean = false//仅能存储布尔值
    let mynumber:number = 123//仅能存储数字
    let myany:any = "hongtang"//可存储任意类型
  3. 定义单一类型数组方式

    let mylist1:Array<string> = ["ht0","ht1","ht2"]//用 Array<类型> 表示数组
    let mylist2:string[] = ["ht3","ht4","ht5"]//用 类型[] 表示数组
  4. 定义联合类型

    let mystrandnum:string | number = "a"//用 | 隔开表示多种类型
    let mylist5:any = "hongtang"//可存储任意类型
    let mylist3:Array<string | number> = ["ht0",123,"ht1"]//用 | 隔开表示能多种类型的数组
    let mylist4:(string | number)[] = ["ht2",456,"ht3"]//用 ()和| 表示能多种类型的数组

(二)枚举

  1. 定义

    //无值
    enum ht1{
     "A","B","C"
    }
    //有值
    enum ht1{
     "A" = 1,
     "B" = 2,
     "C" = 3
    }
  2. 访问

    ht1.A
    ht2["A"]
  3. 打印

    console.log(ht1.A)//在ArkTS开发环境下,仅能打印字符串类型
    console.log(ht1.A.toString())//或强制转换为字符串类型后打印

(三)对象

  1. 定义

    //固定类型
    let myinf1 = {
     name:"hongtang",
     age:18
    }//无法再添加属性
    
    //指定类型和可选类型
    let myinf2:{name:string,age:number,location?:string} = {
     name:"hongtang",
     age:18
    }//location?标识location属性可选,无法再添加属性
    
    //指定接口
    interface IOht{
     name:string,
     age:number,
     location?:string,
     [propName:string]:any//表示可添加任意类型属性属性
    }
    
    //实例化
    let myinf3:IOht = {
     name:"hongtang",
     age:"18"
    }
  2. 扩展属性并赋值

    myinf3.country = "China"

(四)判断

  1. =====的区别

    "2" == 2//在TS中,表示只判断值不判断类型,结果为true
    "1" === 1//在TS中,表示判断类型和值,结果为false
  2. if_else判断

    let order_type:number = 3
    
    if(order_type===1){
      console.log("已付款")
    }else if(order_type===2){
      console.log("已发货")
    }else{
      console.log("已完成")
    }
  3. switc判断

    let order_type:number = 3
    
    switch (order_type){
      case 1:
      console.log("已付款");
      break;
      case 2:
     console.log("已发货");
     break;
      case 3:
     console.log("已完成");
     break;
      default :
     console.log('默认')
    }

(五)for循环

let datalist:string[]= ["华为mate60","华为mate60Pro","华为nova"]

for(let i=0;i<datalist.length;i++){
  console.log(datalist[i]);
}//定义i并规定初始值,满足条件,递增

console.log("-------------------")

for(let i in datalist){
  console.log(datalist[i]);
}//此处i是从0开始增加的

console.log("-------------------")

for(let i of datalist){
  console.log(i);
}//此处i即表示确切的内容而不是键

(六)函数

  1. 定义

    //普通函数
    function test1(){
      console.log("test1-普通")
    }
    
    //箭头函数
    const test2 = ()=>{
      console.log("test2-箭头")
    }
    
    //指定参,返回值
    const test3 = (state:number):string=>{
      let text:string = ""
      switch (state){
     case 1:
       text = "已付款"
       break;
     case 2:
       text = "已发货"
       break;
     case 3:
       text = "已完成"
       break;
     default :
       text="默认"
      }
      return text
    }//state:传入参数名称,number:传入参数类型,string:返回参数类型
  2. 调用

    test1()
    test2()
    test3(2)

(七)类

//定义类
class person{
  public name:string;
  protected age:number;
  private  country:string;//三种不同修饰词
  constructor(name:string,age:number,country:string){
    this.name  = name;
    this.age = age;
    this.country = country;
  }//构造函数,赋值
  //类的成员方法
  say():string{
    return this.name;
  }
}

//实例化
let p = new person("hongtang",18,"China");
console.log(p.name);

//继承并添加项,即为person的子类
class student extends  person{
  schollName :string;
  constructor(name:string,age:number,country:string,school:string){
    super(name,age,country);
    this.schollName = school;
  }
  say():string{
    return this.name+"----"+this.age+"--"+this.schollName;
  }
}

//实例化
let s = new student("hongtang",18,"China","学校名字");
console.log(s.say());

(八)接口

interface IContainer{
  render()
}

class Tabbar implements  IContainer{
  render(){
    console.log("选项卡渲染")
  }
}
class MySwiper implements  IContainer{
  render(){
    console.log("轮播渲染")
  }
}

function init(container:IContainer){
  container.render()
}

init(new MySwiper())
init(new Tabbar())

(九)泛型

class Cache<T> {
  // 此处T可用任意一个大写字母表示
  // private map:Map<string,T> = new Map()
  private map = {}

  setCache(key:string,value:T){
    this.map[key] = value
  }

  getCache(key:string):T{
    return this.map[key]
  }
}

let obj = new Cache<string>()

obj.setCache("name","kerwin")

console.log(obj.getCache("name"))

(十)引用

0

评论 (0)

取消