ArkTS基础语法
基本数据类型
string、number、boolean
变量和常量的命名规则
① 只能包含数字、字母、下划线、$,不能以数字开头
② 不能使用内置关键字或保留字 (比如 let、const)
③ 严格区分大小写
let 变量名:数据类型=值
const 变量名:数据类型=值
数组
①获得数组元素:数组名[索引]
②索引号从0开始
③数组指定的类型和存储的类型必须一致
let 数组名:数据类型[]=[数据1,数据2,数据3...]
函数
①定义函数:先定义后使用
function 函数名(形参1:类型,形参2:类型,...):返回值类型{
函数体(编写代码对数据进行处理)
return 处理后的结果
}
②调用函数:形参和实参要一一对应
let 变量名:类型=函数名(实参1,实参2,...)
箭头函数
let 函数名=(形参1:类型,形参2:类型,...)=>{
函数体
return 返回结果
}
let 变量名:类型=函数名(实参1,实参2,...)
可选参数
//可选参数,在参数名后加?,表示该参数是可选的
function sayHello(name?:string){
//判断name是否有值,如果无值则给一个默认值
name=name?name:'陌生人'
console.log('你好,'+name+'!')
}
sayHello('Jack')
sayHello()
默认参数
//参数默认值,在参数后面赋值,表示参数默认值
//如果调用者没有传参,则使用默认值
function sayHello(name:string='陌生人'){
console.log('你好,'+name+'!')
}
sayHello('Jack')
sayHello()
接口&类&对象
具备面向对象编程的基本语法,例如interface、class、enum等。也具备封装、继承、多态等面向对象基本特征
作用:用于描述一个物体的特征和行为
是一个可以存储多个数据的容器
接口&类
//定义枚举
enum Msg{
HI='Hi',
HELLO='Hello'
}
//定义接口
interface A{
say(msg:Msg):void
}
//实现接口
class B implements A{
say(msg:Msg):void{
console.log(msg+', I am B')
}
}
//初始化对象
let a:A=new B()//多态
//调用方法
a.say(Msg.HI)
继承
//定义矩形类
class Rectangle{
//成员变量
private width:number
private length:number
//构造函数
constructor(width:number,lenght:number){
this.width=width
this.length=lenght
}
//成员方法
public area():number{
return this.width*this.length
}
}
//定义正方形
class Square extends Rectangle{
constructor(side:number){
//调用父类构造
super(side,side)
}
}
let s=new Square(10)
console.log('正方形的面积为:'+s.area())
联合类型
是由多个类型联合组成的数据类型
let 变量:类型1|类型2|类型3=值
把变量值限定在一组数据范围内选择
let 变量:数据|数据|数据
枚举(常量列表)
约定变量只能在一组数据范围内选择值
枚举名和常量名以大写开头
①定义枚举(常量列表)
enum 枚举名{
常量1=值,
常量2=值,
.....
}
enum ThemeColor{
Red='#ff0f29',
Orange='#ff7100',
Green='#e30b30e'
}
若枚举项不赋值,默认是数字0、1、2、3…
②使用枚举类型,约束变量
let color:ThemeColor=ThemeColor.Red
//string:字符串,可以用单引号或者双引号
let msg:string='hello world'
//number:数值,整数、浮点数、进制数(加上前缀)都可以
let num:number=21
//boolean:布尔
let finished:boolean=true
//any:不确定类型,可以是任何类型,编译器不做静态类型检查
let a:any='jack'
a=21
//union:联合类型,可以是多个指定类型中的一种
let u:string|number|boolean='rose'
u=18
//object:对象
let p={name:'Jack',age:21}
console.log(p.name)
console.log(p['name'])
//Array:数组,元素可以是其他任意类型
let names:Array<string>=['Jack','Rose']
let ages:number[]=[21,18]
console.log(names[0])
条件控制
支持if-else和switch条件控制(判断是否相等用三个等号,不用类型检查,提高性能)
在TypeScriypt中,空字符串、数字0、null、undefined都被认为是false,其他值则为true
if(num){ //num非空,可以执行逻辑 }
循环迭代
支持for和while循环,并且为一些内置类型如Array等提供了快捷迭代语法
//定义数组
let names:string[]=['Jack','Rose']
//for in迭代器,遍历得到数组角标
for(const i in names){
console.log(i+':'+names[i])
}
//for of迭代器,直接得到元素
for(const name of names){
console.log(name)
}
模块开发
应用复杂时,我们可以把通用功能抽取到单独的ts文件中,,每个文件都是一个模块(module)。模块可以相互加载,提高代码复用性
//在retangle.ts文件中
//定义矩形类,并通过export导出
export class Retangle{
//成员变量
public width:number
public length:number
//构造函数
constructor(width:number,length:number){
this.width=width
this.length=length
}
}
//定义工具方法,求矩形面积,并通过export导出
export function area(rec:Rectangle):number{
return rec.width*rec.length
}
//在index.ts文件中
//通过import语法导入,from后面写文件的地址
import {Rectangle,area} from '../rectangle'
//创建rectangle对象
let r=new Rectangle(10,20)
//调用area方法
console.log('面积为:'+area(r))