函数定义方式

  • 变量定义函数
  • 接口定义函数
  • 类型别名来定义函数
  1. // 变量定义函数
  2. let add: (x: number, y: number) => number;
  3. // 接口定义函数
  4. interface Add {
  5. (x: number, y: number): number;
  6. }
  7. // 类型别名来定义函数
  8. type Add = (x: number, y: number) => number;
  9. // 使用
  10. let add: Add = (a, b) => a + b;

混合类型的接口

一个接口,既可以定义一个函数,也可以像对象一样拥有属性和方法

定义混合类型接口

  1. interface Lib {
  2. (): void;
  3. version: string;
  4. doSomething(): void;
  5. }

实现混合接口

image.png
增加属性一一对应定义的 interface

  1. let lib: Lib = () => {};
  2. lib.version = "1.0";
  3. lib.doSomething = () => {};

image.png
依旧提示缺少属性,这里使用类型断言,因为我们明确知道这个lib就是我们所定义的接口类型,使用 as Lib

  1. interface Lib {
  2. (): void;
  3. version: string;
  4. doSomething(): void;
  5. }
  6. let lib: Lib = (() => {}) as Lib;
  7. lib.version = "1.0";
  8. lib.doSomething = () => {};

这样一个接口就实现了,但
全局变量lib,是一个单例,要想创建多个lib,需使用函数封装,将其定义在一个getLib函数中,返回lib,这样就可以创建多个实例了

  1. interface Lib {
  2. (): void;
  3. version: string;
  4. doSomething(): void;
  5. }
  6. // 通过调用 getLib 函数,可创建多个实例
  7. function getLib() {
  8. let lib: Lib = (() => { }) as Lib;
  9. lib.version = "1.0";
  10. lib.doSomething = () => { };
  11. return lib;
  12. }
  13. let lib1 = getLib();
  14. lib1();
  15. lib1.doSomething();
  16. let lib2 = getLib();

除此之外,接口还可以定义类的结构和类型

学习笔记出自于梁宵老师课程