TypeScript入门:类的继承和修饰符

482 阅读2分钟

类的写法

class Dog {
  constructor(name: string) {
     this.name = name
  }
  name: string
  run() {}
}
let dog = new Dog('wangwang')
  1. 构造函数参数和成员属性都添加类型注解
  2. 如果构造函数没有给name属性赋值,在写代码时需要给name属性设置一个初始值,否则会报错
  3. 如果不想设置初始值,可以把name设置为可选属性name?: string

继承

class Husky extends Dog {
  constructor(name: string, color: string) {
    super(name)
    this.color = color
  }
    color: string
}

修饰符

public

类的所有成员默认都是public的,意思就是对所有人都是可见的,也可以显式地声明

class Dog {
  constructor(name: string) {
     this.name = name
  }
  public name: string
  run() {}
}
let dog = new Dog('wangwang')

private

私有成员只能被类的本身调用,不能被类的实例和子类调用

class Dog {
  constructor(name: string) {
     this.name = name
  }
  public name: string
  run() {}
  private pri() {}
}
let dog = new Dog('wangwang')
dog.pri() // 报错

class Husky extends Dog {
  constructor(name: string, color: string) {
    super(name)
    this.color = color
    this.pri() //报错
  }
    color: string
}

构造函数加private,类不能被实例化,也不能被继承

class Dog {
  constructor(name: string) {
     this.name = name
  }
  public name: string
  run() {}
  private pri() {}
  protect pro() {}
}

protected

受保护成员,只能在类和子类中访问,不能在实例中访问,构造函数加protected后类不能被实例化,但是能被继承,相当于声明一个基类

readonly

只读属性,必须被初始化,不能被更改

class Dog {
  constructor(name: string) {
     this.name = name
  }
  readonly leg: number = 4
}

构造函数的参数也可以加修饰符,会把参数变成实例属性

class Husky extends Dog {
  constructor(name: string, public color: string) {
    super(name)
    this.color = color
  }
}

static

静态修饰符,只能通过类名调用,不能被实例调用,可以被继承,

class Dog {
  constructor(name: string) {
     this.name = name
  }
  static food: string = 'bones'
}
let dog = new Dog('wangwang')

Dog.food // bones
Husky.food // bones
dog.food // undefined