Skip to content

函数定义方式

  • 变量定义函数
  • 接口定义函数
  • 类型别名来定义函数
typescript
// 变量定义函数
let add: (x: number, y: number) => number

// 接口定义函数
interface Add {
  (x: number, y: number): number
}

// 类型别名来定义函数
type Add = (x: number, y: number) => number
// 使用
let add: Add = (a, b) => a + b

混合类型的接口

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

定义混合类型接口

typescript
interface Lib {
  (): void
  version: string
  doSomething(): void
}

实现混合接口

image.png

增加属性一一对应定义的 interface

typescript
let lib: Lib = () => {}
lib.version = '1.0'
lib.doSomething = () => {}

image.png

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

typescript
interface Lib {
  (): void
  version: string
  doSomething(): void
}

let lib: Lib = (() => {}) as Lib
lib.version = '1.0'
lib.doSomething = () => {}

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

typescript
interface Lib {
  (): void
  version: string
  doSomething(): void
}

// 通过调用 getLib 函数,可创建多个实例
function getLib() {
  let lib: Lib = (() => {}) as Lib
  lib.version = '1.0'
  lib.doSomething = () => {}
  return lib
}

let lib1 = getLib()
lib1()
lib1.doSomething()
let lib2 = getLib()

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

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