因为ArkTS和TypeScript很像,所以先学习TypeScript对掌握ArkTS很有帮助,我学完感觉和C++、java有很大的相似之处,当然可能还有其他语言,但我并不是很了解哈,总而言之,TypeScript语言集齐了其他语言的很多优点,值得学习
快速熟悉TypeScript
写的代码可以在这个网址练习或验证代码是否正确(演练场中练习代码):TypeScript: JavaScript With Syntax For Types.
变量声明:
let msg: string = 'hello world'
| | |
| | 变量的数据类型
| 变量名,自定义
声明变量的关键字,const代表常量,let代表变量
变量的数据类型种类
//字符串,可以用单引号或者双引号
let msg: string = "hello"
console.log('msg'+msg)
//数值,整数,浮点数都可以
let age: number = 21
console.log('age:'+age)
//布尔
let finished: boolean = true
console.log('finished'+finished)
//any:不确定类型,可以是任意类型,赋成jack也能改成21
let a: any = 'jack'
a=21
//union:联合类型,可以是多个指定类型中的一种
let u: string|number|boolean = 'rose'
u = 18
console.log("u:"+u)
//对象
let p = {name:'Jack',age:12}
console.log(p.name)
console.log(p['name'])
//数组,元素可以是任意其他元素
let names: Array<string> = ['Jack','Rose']
let ages: number[] = [21,18]
console.log(names[0])
条件控制
支持if - else 和 switch
if-else
let num:number = 21
if(num % 2 === 0){
console.log(num + '是偶数')
}else{
console.log(num + '是奇数')
}
//判断是否为正数
if(num > 0){
console.log(num+'是正数')
}else if(num < 0){
console.log(num+'是负数')
}else{
console.log(num+'为0')
}
//判断变量是否存在
let data: any;
if(data){
console.log("数据存在:"+data)
}else{
console.log("数据不存在!")
}
注意1
‘’===‘’是比较严格比较操作符,他在比较时不会进行类型转换当数据值和类型都相等才会返回true。
‘’==‘’是相等比较操作符,它在比较时会进行隐性的数据转换,把两个比较数转换为同一种类型,会有意想不到的结果。
console.log(1 == "1"); // true
console.log(true == 1); // true
注意2
TypeScript中,空字符串,数字0,null,underfined都被认为是false,其他则为true
if(true){
//num非空,可以执行逻辑
}
用途:一般情况下,当一个数啥也没有,我们并不用处理它,用这个知识点就可以判定它存不存在,可以帮助我们节省麻烦。
switch
switch和其他编程语言中差不多
let grade: string='A'
switch(grade){
case 'A':{
console.log('优秀')
break
}
case 'B':{
console.log('合格')
break
}
}
循环迭代
for和while
for(let i = 1;i<=10;i++){
console.log("点赞" + i + "次")
}
let i = 1;
while(i <= 10){
console.log("点赞" + i + "次")
i++;
}
当然,一些内置类型有自己的快捷语法,比如Array等
let names: string[] = ["Jack","Rose"]
//fot in 迭代器,遍历得到数组角标
for(const i in names){
console.log(i + ':' +names[i]) //i就是拿到的角标,输出i就是输出下标
}
//for of 迭代器,直接得到元素
for(const name of names){
console.log(name)
}
函数
函数用function关键字来声明函数,并且支持可选参数、默认参数、箭头函数等特殊语法。
//无返回值,void可省略
function sayHello(name: string):void{
console.log("你好," + name +"!")
}
//有返回值函数
function sum(x: number,y: number): number{
return x + y
}
let result = sum(21, 18)
console.log("21 +18" + result)
//箭头函数(简单定义函数的方法)
let sayHi = (name: string) =>{ //没有写function,因为这里默认定义的变量的类型是function
console.log("你好," + name + "!")
}
sayHi("Rose")
//可选参数,在参数后加?,表示该参数是可选的
function sayHello(name?: string){
name = name ? name : "陌生人"
console.log("你好," + name + "!")
}
sayHello("Jack")
sayHello()
//默认参数
function say(name: string = "陌生人"){ //这里看起来像是把name定义成陌生人
console.log("你好" + name +"!") //但实际上是如果没传参,用定义的,传参了就用传入的参数
}
say("Jack")
say()
类和接口
typescript具有面向对象编程的基本语法,例如Interface\class\enum等。也具备封装、继承、多态等面向对象基本特征。
//定义枚举
enum M{
HI = "hi",
HELLO = "Hello"
}
//定义接口,抽象方法接受枚举参数
interface A{
say(m: M):void //凡是接口和类内的方法不需要加function关键字
} //这里的方法名叫say ,参数是m 类型是M前面定义的,返回值是void,无返回值
//定义一个类来实现接口
class B implements A{ //实现了A接口
say(m: M):void{
console.log(m + ",I am B")
}
}
//初始化对象
let a:A = new B()//这里是把子类对象赋值给了父类类型,a的类型是A,由B实现,
//所以也没错,正常来说应该是a:B
//调用方法,传递枚举参数
a.say(M.HI)
class Rectangle{
private width: number
private length: number
constructor(width: number,length: number){
this.width = width
this.length = length
}
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())
模块开发
目的:提高代码复用性,应用复杂时,我们可以把功能抽取到单独的ts文件中,每个文件都是一个模块(module),模块之间可以相互加载,提高代码复用性
注意文件名,这个是rectangle.ts文件
//定义矩形类,通过export导出
export class Rectangle{
private width: number
private length: number
constructor(width: number,length: number){
this.width = width
this.length = length
}
public area(): number{
return this.width * this.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))