typescript的使用:
node项目中使用ts,首先安装依赖,然后再tsconfig.json中配置
typescript中的数据类型:
1、布尔类型(boolean)
2、数字类型(number)
3、字符串类型(string)
4、元祖类型(tuple),属于数组的一种,可以指定数组中具体位置的值的类型
5、枚举类型(enum),其中各个标识符的默认值为对应的角标
6、任意类型(any),允许在赋值的过程中改变类型
7、null和undefined
8、void类型,声明的变量只能被赋值为null和undefined
9、never类型
10、数组类型([]),有两种定义方式:1.var arr = number[] 2.var arr = Array<number>
方法的参数问题:ts中方法的参数可以和es6一样设置默认参数,并且形参和实参必须保持一致,如果不一样就需要配置可选参数(?),而且必须配置在所有参数的最后。
当一个方法中不确定有多少个参数,可以使用扩展运算符,例:加法
eg: function sum(...args:number[]): number{
....
}
类型批注:定义变量时,使用“:”的方式可以限制值的类型。
eg:let num: number
类型断言:通过as语法或者<>的形式实现,相当于把某些变量指定为某种类型,编译时不会因为类型不同而报错。
类型推论:在定义变量的时候,如果没有指定类型,下次再给这个变量赋值为不同类型的值的时候会报错,默认只能赋值为初始化值的类型。
联合类型:使用“ | ”,声明变量时可以指定为多种类型。
接口(interface):约束对象的类型,规定通过接口定义的对象中的属性和方法的返回值类型,以及必须定义的属性和方法,可以设置为只读(readonly)、可选(?)和任意(any)属性。也可以通过接口定义一些公共的方法。
修饰符:1、public,在声明的类的外部也可以访问类的属性和方法。
2、private,不能在类的外部被访问,即使这个类的子类也无法访问。
3、protected,不能在类的外部被访问,但这个类的子类可以访问。
ts中的重载:
如果一个方法接收的参数个数或者参数类型不能,可以使用重载
eg:function getUserInfo(name: string): string
function getUserInfo(name: string,age: number): number
function getUserInfo(name: string,age?: number)): any {
...
}
以上就是重载的一个使用,调用getUserInfo这个方法,传入的参数不固定,无论传一个还是两个都是正确的。
ts中的类:
定义的类的属性和方法可以添加修饰符,还有构造函数constructor,它是在实例化的时候触发的方法,可以接受参数,给类中的属性赋值。
类的方法:
1.静态方法:
通过static修饰的方法为静态方法,类中的静态方法不能直接调用类中的属性,除非该属性也是通过static修饰。
2.实例方法:
没有static修饰的叫实例方法,需要实例化之后才能调用。
抽象类:可以被其他类继承,但是不能被实例化。
使用abstract关键字定义抽象类和抽象方法,可以限制子类必须具备某些方法,抽象类中的抽象方法没有具体逻辑,需要由子类去写逻辑,而且抽象方法只能放在抽象类里。
ts中的继承:
子类继承父类的属性和方法,通过extends、super。除了继承父类属性和方法,还可以扩展自己的属性和方法。
eg:class Father {
name: string;
constructor(name: string) {
this.name = name
}
}
class Son extends Father {
constructor(name: string){
super(name)
}
}
let s = new Son("lili")
在创建Son的实例的时候执行构造函数constructor中的super方法,初始化了Father的构造函数,将Father中的name赋值,然后Son的实例继承了该属性。
多态也是类的继承的一种实现,比如父类定义了一个方法,但是没有写具体逻辑,由子类继承之后再去写逻辑,可以同一个方法实现不同的逻辑。
泛型:在参数类型不明确的情况下,保证传入的参数和返回的参数类型一致。