TypeScript 类

类的修饰符

class Article {
  // 公共属性
  public afA: string;
  // 可选的公共属性,意味着可以不赋值
  public afB?: string;
  // 可选的受保护属性,只能在该类及其子类中访问。
  protected afC?: string;
  // 私有属性,只能在该类内部访问。
  private afD?: string;
  // 公共的静态属性,可以在类的实例之外访问,与实例无关。
  public static afE: string;
  // 私有的静态属性,只能在类内部访问。
  private static afF: string;
  // 只读属性,必须在构造函数中初始化,之后无法更改。
  readonly afG?: string;
  // 构造函数
  constructor(afA: string, afC: string) {
    this.afA = 'title';
    this.afC = 'content';
  }
}

constructor 构造函

构造函数中可以直接使用 this. 来初始化成员变量

class User {
  constructor(public name: string) {
    this.name = name;
  }
}

存取器

class User {
  // 设置私有属性
  private _password: string = '';
  // get 和 set 的作用就是可以把一个方法伪装成变量一样操作。
  get password(): string {
    return '*****';
  }
  set password(newPass: string) {
    this._password = newPass;
  }
}

泛型类

class Collection<T> {
  data: T[] = [];

  public push(...items: T[]) {
    this.data.push(...items);
  }

  public shift(): T | undefined {
    return this.data.shift();
  }
}

const A = new Collection<number>();
A.push(1, 2, 3);
class User<T> {
  public constructor(private _user: T) {}
  public get(): T {
    return this._user;
  }
}

interface UserInterface {
  name: string;
  age: number;
}
const user = new User<UserInterface>({ name: 'alrcly', age: 18 });
console.log(user.get.name);
interface ArticleEnteface<B, C> {
  title: string;
  isLock: B;
  comments: C[];
}

type CommentType = {
  content: string;
  author?: string;
};

const hd: ArticleEnteface<boolean, CommentType> = {
  title: '开心的一天',
  isLock: true,
  comments: [{ content: 'Good' }, { content: 'NONoNo' }],
};