class类型

class类型,和Java差不多。

class Person {
  name: string;
  age: number = 0;
}

let person = new Person();

构造函数

class Person {
  name: string;
  age: number = 0;

  constructor(name: string, age: number){
    this.name = name;
    this.age = age;
  }
}

let person = new Person('zhangsan',19);

类实现接口

interface Person{
  sayHell(content: string): string;
}


class PersonImpl implements Person {
  sayHell(content: string): string {
      return content;
  }
}

方法修饰符

TS也提供了如Java一样的方法修饰符:

  1. public
  2. protected
  3. privated
class PersonImpl implements Person {
  public sayHell(content: string): string {
      return content;
  }

  protected sayHell2(content: string): string {
    return content;
  }

  private sayHell3(content: string): string {
    return content;
  }
}

readonly修饰属性

加了readonly属性,相当提供了get方法,没提供set方法

class Person {
  readonly name: string;

  //构造可以赋值
  constructor(name: string) {
    this.name = name;
  }
}

let person = new Person('zhangsan');
//不能赋值
 person.name = "John";

类型兼容性问题

类型兼容性,类型系统分为两种:结构型和标明型

标明型:两个没有任何关系的类,是不能进行兼容赋值的。比如说 A类 和 B类,A = B是会报错的;如Java,C++都属于标明型
结构型:两个没有任何关系的类,如果内部属性和方法完全一致(默认值可不用一致)或者说其中一个类完全兼容另一个类属性和方法,是可兼容赋值的。 A=B可成立

TS是结构型,我举个例子吧:

class Person1 {
  name: string = "John2";
}

class Person2 {
  name: string = "John";
  age: number = 18;
}

let person1 = new Person1();
let person2 = new Person2();
person1 = person2;

可以这里理解,如果Person1有的,Person2也有并且还有Person1没有的,那Person2相当Person1的子类。

PS:interface和class都有这个结构型的特性