声明类

  1. class ClassName {
  2. public value: number // 实例属性
  3. public getValue ( ): number { // 实例方法
  4. return this.value
  5. }
  6. constructor ( params: number ) {
  7. this.value = params
  8. }
  9. }
  10. const ins = new ClassName(123)
  • 构造函数中通过this定义的属性和方法都在实例自身上
  • 类中定义的属性会在实例自身上,方法会在原型对象上
  • 创建实例时,本质上调用的就是类的构造器函数(constructor)

实例类型

定义的类既是一个值,也是一个类型,实例的类型就是创建它的类

class People {
    constructor(public name: string) {} 
}

const people = new People('阿坤')   // people: People
const clonePeople: People = people
  • 实例的类型创建时可以省略

构造器类型

new() => type
const classOne:new() => ClassOne  = ClassOne
  • 对类的构造方法进行约束,参数与实例类型都符合的类,才能赋值

继承

可以继承其他的类,进行代码的复用,通过 extends 进行继承

class Child extends Parent {
    constructor ( params: number ) {
    super( params )
  }
}
  • 如果子类没有定义constructor,那么会直接使用父类的constructor
  • 继承后子类的构造函数中会有一个super函数
    • super 就是父类的构造函数(constructor)
    • 可以传入参数调用,调用后子类会拥有父类的实例属性
    • 就是借用构造函数继承实例属性
  • 只能继承一个父类

静态成员

即类自身的属性和方法,通过 static 修饰符定义

class Self {
    static age: number = 666
    static print ():void {
        console.log( Self.age )
    }
}
  • 静态成员无法继承,也无法通过this访问,只能通过类访问
  • 能够使用访问修饰符,效果同实例成员

存取器

类的存值函数与取值函数,就是赋值/访问时会调用的函数,同ES6

class ClassName {
  private _name: string = '阿坤'
    get name() {          // 取值器
      return this._name
  }
  set name( value ) {          // 存值器
      this._name = value
  }         
}

const ins = new ClassName()
console.log( ins.nameStr )
ins.nameStr = '篮球'
  • get 定义取值器,set 定义存值器,名称随意
  • 同名的geter和seter是一个整体,会成为一个实例属性
  • 赋值触发seter,访问触发geter