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