Typescript学习备忘录 - 1
数据类型
string, number, boolean, null, undefined, array, obeject, function,
TS新增数据类型:元组,枚举,any,never,void,高级类型
枚举
枚举可以定义一些带名字的常量,包括数字类型枚举和字符串类型的枚举。
接口
接口的作用就是为类型命名和为你的代码或第三方代码定义契约。
类型断言
类型断言可以用来手动指定一个值的类型。
函数
定义函数有四种方式:
// 方式一:函数
function fun1(a: number, b: number): number{
return a + b;
}
// 方式二:字面量
let fun2: (a: number, b: number) => number
// 方式三:别名
type fun3 = (a: number, b: number) => number
// 方式四: 接口
interface fun4{
(a: number, b: number) : number
}
可选参数定义:(a?: number, b: number): number
默认参数定义:(a?: number, b=0): number
,默认参数如果定义在必传参数前面,就必须传值,放在必传参数后面则可以不用。
剩余参数定义:
function fun5(a:number, ...rest: number[]){
return a + rest.reduce((prev, next)=>prev+next)
}
console.log(fun5(1,2,3,4,5));
类
类的实现
“类的成员属性”都是实例属性,而不是原型属性,“类的成员方法”都是“原型”方法。
在TS中,类的属性必须有初始值或被初始化。
class People{
constructor(name: string){
this.name = name
}
name: string
say(){
}
}
类的继承
class Women extends People{
constructor(name: string, sex: string) {
super(name)
this.sex = sex
}
sex: string
}
类的修饰符
public
: 公有成员,默认值。
private
: 私有成员,只能被类的原型中访问,不可以被实例访问,也不可以被子类访问。如果把构造函数设置为 private,则类不可以被实例化,也不能被继承。
protected
:受保护成员,只能在类和子类中访问,不能被实例访问。如果把构造函数设置为 protected,则类只能被继承,不可以被实例化,相当于基类。
readonly
: 只读属性,不可以被修改,必须初始化。
static
:只读属性,只能用类名访问,不能用实例访问。
抽象类和多态
抽象类定义 abstract
,抽象类只能被继承,不能被实例化。类的内部的抽象方法,只能被子类实现。
// 抽象类
abstract class People{
constructor(){
}
say(){
console.log('people say');
}
// 抽象方法
abstract say(): void
}
class Women extends People{
constructor() {
super()
}
say(){
console.log('woman likes man');
}
}
class Man extends People{
constructor() {
super()
}
say(){
console.log('man likes woman');
}
}
let women = new Women()
let man = new Man()
let peoples: People[] = [women, man]
peoples.forEach(i=>{
i.sleep()
})
this与链式调用
类的方法定义返回 this,可以实现方法的链式调用。
class Workflow{
constructor(){
}
step1(){
return this
}
step2(){
return this
}
}
new Workflow().step1().step2()
类与接口
可以用接口来定义类,类用implements
关键字声明。
- 接口中声明的属性和方法必须在类中实现。
- 类可以定义接口中不存在的方法和属性。
- 接口不能定义类的私有属性,不能定义类的构造函数。
- 接口可以相互继承,也可以继承类,接口在继承类的时候会同时继承类的私有属性和受保护属性。