【TypeScript】类
2021/09/09 09:36:16
摘要
- 使用 
extends关键字实现类继承。 private修饰的成员只能在声明它的类中访问,protected修饰的成员可以在声明它的类的派生类中访问。- 将构造函数用 
protected修饰意味着这个类不能在外部被实例化,但是能被继承。 - 只带有 
get不带有set的存取器自动被推断为readonly。 - 实例化一个类时创建出的实例的类型就是该类。
 - 一个类只能继承自一个父类,但是可以同时实现多个接口。
 - 用 
implements关键字让一个类实现其他类从而实现混入。 
修饰符
在 TypeScript 里,成员都默认为 public。
private 私有
当成员被标记成 private 时,它只能在声明它的类中访问,不能在派生类和其他类中访问。
class Animal {
    private name: string;
    constructor(theName: string) { this.name = theName; }
}
new Animal("Cat").name; // 错误: 'name' 是私有的.
protected 受保护
protected 修饰符与 private 修饰符的行为很相似,但有一点不同, protected 成员在派生类中仍然可以访问。
class Animal {
  private name: string;
  protected age: string;
  constructor(theName: string) { this.name = theName; }
}
class Employee extends Animal {
  getProperty() {
    this.name;  // name无法访问
    this.age    // age可以访问
  }
}
用 protected 修饰 constructor
class Animal {
  protected constructor(theName: string) { this.name = theName; }
}
class Employee extends Animal {
  constructor() {
    super('employee');
  }
}
new Animal();   // error,Animal的构造函数是受保护的
new Employee(); // success
readonly 只读
只读属性必须在声明时或构造函数里被初始化。
存取器 getter/setter
只带有 get 不带有 set 的存取器自动被推断为 readonly
静态属性
用 static 在类中定义静态成员,访问静态成员需要在成员名之前加上类名。
抽象类
用 abstract 定义抽象类,抽象类只能被继承不能实例化。
可以用 abstract 关键字在抽象类中定义抽象成员,抽象成员必须在派生类中实现。
抽象成员可以在 abstract 之前使用修饰符,不能使用 private 修饰符
abstract class Animal {
    abstract makeSound(): void;
    protected abstract name: string;
    move(): void {
        console.log('roaming the earch...');
    }
}
class AllAnimal extends Animal {
  makeSound() {}
  name;
}
mixins 混入
用 implements 关键字让一个类实现其他类从而实现混入。
把类当成了接口,仅被实现类的类型而非其实现。
class Disposable {
  isDisposed: boolean;
}
// Activatable Mixin
class Activatable {
  isActive: boolean = true;
}
class SmartObject implements Disposable, Activatable {
  isActive;
  isDisposed;
}