TypeScript——类

ES6之后JS将能够使用基于类的面向对象的方式,TS中的类覆盖了JS中的类

  • 基本实现

“类的成员属性”都是实例属性,而不是原型属性,“类的成员方法”都是“原型”方法

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string // 需要增加成员类型注释
    run() {}
}
console.log(Dog.prototype) // { run: f, constructor: f }


继承
与ES不同的是:实例的属性必须有初始值,或者在构造函数中被初始化

派生类从基类中继承属性和方法,用作于类的拓展
class Husky extends Dog {
    constructor(name: string, color: string) {
        super(name) // 派生类的构造函数必须包含 "super" 调用
        this.color = color; // 访问派生类的构造函数中的 "this" 前,必须调用 "super"
    }
    color: string
}


修饰符

修饰符
含义
作用


public
公共成员(默认)
对所有类可见


private
私有成员

只能在类本身调用 而不能在实例/子类中调用;
构造函数使用则该类不可实例化和继承;



protected
被保护成员

可在类本身及子类调用,而不能在实例中调用;
构造函数使用则该类不可实例化,只能被继承;



readonly
只读成员
一定需要初始化,不可修改


static
静态成员
只能通过类名调用(实例化对象no),可被继承





抽象类:只能被继承,而不能被实例化(对ES的拓展)



// 抽象类:抽离出一些类的共性,有利于代码的复用和拓展 可实现多态
abstract class Animal {
    eat() {
        console.log(‘eat‘)
    }
    abstract sleep(): void // 在抽象类中可以定义抽象函数
}
// let animal = new Animal() 无法创建抽象类的实例


//
class Bird extends Animal {
    sleep() {        // 在子类中做不同的操作,从而实现多态
        console.log(‘Bird sleep‘)
    }
}