函数类型的定义
- 使用变量去定义函数类型
let add: (x: number, y: number) => number
- 使用接口定义
interface Add {
(x: number, y: number): number
}
- 使用类型别名,
type关键字
type Add = (x: number, y: number) => number
let add: Add = (a, b) => a + b
混合类型接口
实现一个库函数接口:
- 是一个函数
- 有版本号
- 有静态方法
interface Lib {
(): void;
version: string;
doSomething(): void;
}
// 为了能搞创建多个lib实例
function getLib() {
let lib = (() => {}) as Lib
lib.version = '1.0.0'
lib.doSomething = () => {}
return lib;
}
let lib1 = getLib()
lib1()
let lib2 = getLib()
lib2.doSomething()
type和interface多数情况下有相同的功能,就是定义类型。但有一些小区别:
- type:不是创建新的类型,只是为一个给定的类型起一个名字。type还可以进行联合、交叉等操作,引用起来更简洁。
- interface:创建新的类型,接口之间还可以继承、声明合并。 如果可能,建议优先使用 interface。