TypeScript interface

121 阅读1分钟

属性接口

  interface Info {
    name: string;
    age: number | string;
    addr?: string;  // 可选属性
    readonly sex: string;  // 只读属性
    [propName: string]: any;  // 索引签名
  }

函数类型接口

  interface SearchFunc {
    (str: string, keyword: string): boolean;
  }

  let searchWord: SearchFunc = function(string: string, keyword: string): boolean {
      return string.includes(keyword);
  }

类类型接口

类是具有两个类型的:静态部分的类型和实例的类型。

  interface Animal {
      name: string;
      sound(): string;
  }

  class Cat implements Animal {
      public name: string ='cat';
      sound(): string {
          return '喵喵'
      }
  }

检查类的静态部分

  interface ClockConstructor {
    new (hour: number, minute: number):any;
  }
  interface ClockInterface {
      tick():void;
  }
  class Clock implements ClockInterface {
      constructor(h: number, m: number) { }
      tick() {
          console.log('tick')
      }
  }
  function createClock(clock: ClockConstructor, hour: number, minute: number): ClockInterface {
      return new clock(hour, minute);
  }
  let clock = createClock(Clock, 17, 17);

接口继承类

当接口继承了一个类类型时,它会继承类的成员但不包括其实现。 就好像接口声明了所有类中存在的成员,但并没有提供具体实现一样。 接口同样会继承到类的private和protected成员。 这意味着当你创建了一个接口继承了一个拥有私有或受保护的成员的类时,这个接口类型只能被这个类或其子类所实现(implement)。

  class Control {
      private state: any;
  }

  interface SelectableControl extends Control {
      select(): void;
  }

  class Button extends Control implements SelectableControl {
      select() { }
  }

  class TextBox extends Control {
      select() { }
  }

  // 错误:“Image”类型缺少“state”属性。
  class Image implements SelectableControl {
      select() { }
  }

  class Location {

  }