官网

在线编译

一、变量声明

let [变量名] : [类型] = 值;
  • string

string:字符串,可以用单引号或双引号,一般用单引号

let msg: string = 'hello world'
  • number

数值,整数,浮点苏都可以

let age: number = 21
  • boolean

布尔类型

let finished: boolean = true
  • any

不确定类型,可以是任意类型。

谨慎使用any来定义类型,因为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(name[0])

二、条件控制

typescript的条件控制语句与Java没有区别。if、else、else if、switch、case、default等等....

只不过值得注意的是,比较运算符== 和 === 的区别

  • ==

比较的时候,如果两个操作数的类型不同,会尝试进行类型转换,然后比较

console.log(5 == "5"); // 输出 true,因为 "5" 被转换为数字 5
console.log(true == 1); // 输出 true,因为 true 被转换为数字 1
console.log(null == undefined); // 输出 true,因为它们被视为相等
  • ===

比较的时候,比较严格,比较的时候不会进行类型转换。一般也用这个运算法多一些

console.log(5 === "5"); // 输出 false,因为类型不同
console.log(true === 1); // 输出 false,因为类型不同
console.log(null === undefined); // 输出 false,因为类型相同但值不同

注意:

在TypeScipt中,空字符串,数字0,null,undefined都被认为是false,其他则为true

三、循环迭代

TypeScript的循环迭代也跟java一样,for、while......。

这里不多赘述,只说不一样的 或者有新的特性的

TypeScripti支持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)
}

四、函数

TypeScript通常利用function关键字声明函数,并且支持可选参数、默认参数、箭头函数等特殊语法。

function func_name( param1 [:datatype], param2 [:datatype]) :return_type{   

}

返回值类型为void的时候可省略不写

  • 可选参数

有些参数可以传入,也可以不传入。在参数名后面加?,表示该参数是可选的

function sayHello(name?: string) {
  // 判断name是否有值,如果无值则给一个默认值
  console.log('你好,' + name + '!')
}

sayHello('Jack') //输出 “"你好,Jack!" ”
sayHello()		//输出 “"你好,undefined!" ”
  • 默认值参数

如果不传入该参数,那么就会该改参数设置一个默认值

function sayHello(name: string = '陌生人'){
	console.log('你好,'+name+'!')
}

sayHello('Jack') //输出 “"你好,Jack!" ”
sayHello()		//输出 “"你好,陌生人!" ”
  • 箭头函数(Lambda函数)

没有函数名的函数,也不用写function关键字

( [param1, param2,…param n] )=> {
 
    // 代码块
}

省略原则:

  1. 参数类型可以省略不写

  2. 如果只有一个参数 参数类型可以省略 同时()括号也可以省略

  3. 如果方法体中的代码只有一行 ,那么 大括号、分号、return 可以同时不写, 但是不能只不写其中的某一个或者两个

var foo = (x:number)=>10 + x 
console.log(foo(100))      //输出结果为 110

var foo = x=>10 + x 
console.log(foo(100))      //输出结果为 110

var func = x=> { 
    if(typeof x=="number") { 
        console.log(x+" 是一个数字") 
    } else if(typeof x=="string") { 
        console.log(x+" 是一个字符串") 
    }  
} 
func(12) 
func("Tom")


//箭头函数
let sayHi = (name:string)=>{
console.Log('你好,'+name+'!')
sayHi('Rose')

五、类和接口

TypeScript具备面向对象编程的基本语法,例如interface、class、enum等。也具备封装、

继承、多态等面向对象基本特征。

  • 多态例子

//定义枚举
//如果枚举类不赋值,则默认值是数字,第一项是0 第二项是1 .....
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,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(2)
console.log("正方形的面积为:"+s.area())

六、模块开发

应用复杂时,我们可以把通用功能抽取到单独的ts文件中,每个文件都是一个模块(module)

模块可以相互加载,提高代码复用性。

文章作者: 落叶知秋
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 落叶知秋
鸿蒙开发
喜欢就支持一下吧