1. class Person {
  2. name: string; // = 'init name'
  3. age: number;
  4. constructor(name: string, age: number) {
  5. this.name = name;
  6. this.age = age;
  7. }
  8. sayHi (msg: string):void{
  9. console.log(`Hello, ${this.name}`);
  10. }
  11. }

访问修饰符

public 公有(默认)
private 私有,只能自己可以访问
protected 受保护,子类可以访问到

对于构造函数的访问修饰符,
如果被设置为 private,就不能被实例化和继承
如果被设置为 protected,就不能被实例化,但可以继承
只能在类的内部创建一个静态方法,用于类实例的创建

  1. class Student{
  2. private constructor(name: string, age: number){
  3. super();
  4. }
  5. static create(name: string, age: number){
  6. return new Student(name, age);
  7. }
  8. }
  9. const jack = Studen.create('jack', 18);

只读属性

可以在访问修饰符后面加上 readonly,只能在定义上设置初始值。
之后在外部或内部都不能被修改了。

类与接口

用接口约束不同类型相同的能力,但能力的实现肯定不一样。
尽量让每个接口的定义,更加简单与细化

interface Eat {
    eat(food: string): void;  
}

interface Run {
    run(distance: number): void;
}

implements 关键词来实现接口

class person implements Eat, Run {
    eat(food:string){
      console.log(`优雅地进餐: ${food}`);
  }
  run(distinct:number){
      console.log(`直立行走: ${distance}`);    
  }
}

class Animal implements Eat, Run {
    eat(food: string){
      console.log(`呼噜呼噜的吃: ${food}`);
  }
  run(distance: number){
      console.log(`爬行: ${distance}`);
  }
}

抽象类

与接口相似,但可以包含具体的实现,定义为抽象类之后只能被继承,不能被 new 成实例

abstract class Animal {
  eat(food: string){
    console.log(`呼噜呼噜的吃: ${food}`);
  }

  abstract run(distance: number): void;
}

class Dog extends Animal {
    run(distance: number): void {
      console.log('四脚爬行', distance);
  }
}