对对象形状进行描述,对类的一部分行为的抽象。

函数类型接口

接口不仅可以描述 JavaScript 中对象的各种外形,也可以描述函数类型。

  1. interface SearchFn {
  2. (source: string, subString: string): boolean;
  3. }
  4. let mySearch: SearchFn;
  5. mySearch = function (source, subString) {
  6. let res = source.search(subString);
  7. return res > -1;
  8. }
  9. // 以前篇章的写法 很冗余
  10. let oldMySearch: (source: string, subString: string)=> boolean = function (source, subString) {
  11. let res = source.search(subString);
  12. return res > -1;
  13. }

可索引类型接口

  1. 支持两种索引签名: 字符串和数字
  2. 索引签名类似于领导的意思
  3. 索引签名可以设置为只读 ```typescript interface StringArr {

}

let arr: StringArr; arr = [“aa”, “bb”];

// 特殊: number 来当索引时,JS 会将它转换为字符串去索引 interface Person { [propName: string]: string; // fouce on this name: string; age: number; // -> 报错 只能为string类型 }

  1. <a name="SNghU"></a>
  2. ## 类类型实现接口
  3. 类类型实现接口,关键字: implement,类需要实现接口中的属性和方法。 <br />对比抽象类,关键字: abstract,抽象类只需要实现其中的抽象方法,其他是可以继承的。
  4. ```typescript
  5. interface IClock { // 在这里定义类型
  6. currentDate: Date;
  7. setDate(d: Date): void;
  8. }
  9. // 关键字 implement
  10. class Clock inplement IClock { // 在这里实现
  11. currentDate: new Date();
  12. setDate (d: Date) {
  13. this.currentDate = d;
  14. }
  15. }

类的静态部分实现

  1. interface IDoor {
  2. name: string;
  3. open(): void;
  4. close(): void;
  5. }
  6. class Door implement IDoor {
  7. name = "amazingDoor";
  8. // constructor 是在类的静态部分,所以不再检查范围内;
  9. constructor (num: number) {
  10. }
  11. open () {
  12. console.log("welcom");
  13. }
  14. close() {
  15. console.log("bye");
  16. }
  17. }
  18. // 我们可以抽离一个函数的 interface 来实现检查 constructor
  19. interface DoorConstructor {
  20. new(num: number): any;
  21. }
  22. function creatDoor (D: DoorConstructor, num: number) {
  23. return new D(num);
  24. }
  25. let aDoor = createDoor();

接口继承

接口跟类一样,接口也可以相互继承。

  1. interface Alarm {
  2. Tip(): void;
  3. }
  4. interface Door extends Alarm {
  5. color: string;
  6. open(): void;
  7. close(): void;
  8. }
  9. let securityDoor = {} as Door;
  10. securityDoor.color = "white";
  11. securityDoor.open = () => {};
  12. securityDoor.Tip = () => {};
  13. securityDoor.close = () => {};
  1. 接口也可以继承类 ( 不建议这样写 )
  1. class Point {
  2. x: number;
  3. y: number;
  4. constructor (x: number, y: number) {
  5. this.x = x;
  6. this.y = y;
  7. }
  8. }
  9. interface Point3D extends Point {
  10. z: number;
  11. }
  12. let ponit3D: Point3D = {
  13. x: 0,
  14. y: 0,
  15. z: 0
  16. }