声明

  1. interface Point {
  2. x: number;
  3. y: number;
  4. z?: number;
  5. readonly k: number;
  6. [key: string]: string;
  7. }

声明混合类型

  1. interface Invoker {
  2. (): void;
  3. fn: () => void;
  4. }
  5. const invoker: Invoker = function () {
  6. invoker.fn();
  7. }
  8. invoker.fn = () => console.log(111);
  9. invoker();

vue 中事件绑定就是这么使用的,方便事件更新提升性能

相同名称接口会合并

  1. interface Point {
  2. x: number;
  3. y: number;
  4. }
  5. let point: Point;
  6. interface Point {
  7. z: number;
  8. }
  9. point.z

接口可以继承,方便扩展

  1. interface Point {
  2. x: number;
  3. y: number;
  4. }
  5. interface MyPoint extends Point {
  6. z: number;
  7. }
  8. let point: MyPoint;
  9. point.z

接口声明类类型

  1. interface Class {
  2. new(...args: any[]): any
  3. }

接口声明函数

  1. interface IFunc {
  2. (name: string, age: number): void
  3. }
  4. const func: IFunc = function (name: string, age: number) {}

总结

类可以适用于混合类型(函数上的属性,type 无法描述)的场景,以及更方便继承扩展,除了联合类型都建议使用 interface 而非 type,接口不支持联合类型(string | number)