函数定义方式
- 变量定义函数
- 接口定义函数
- 类型别名来定义函数
// 变量定义函数
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;
混合类型的接口
一个接口,既可以定义一个函数,也可以像对象一样拥有属性和方法
定义混合类型接口
interface Lib {
(): void;
version: string;
doSomething(): void;
}
实现混合接口
增加属性一一对应定义的 interface
let lib: Lib = () => {};
lib.version = "1.0";
lib.doSomething = () => {};
依旧提示缺少属性,这里使用类型断言,因为我们明确知道这个lib就是我们所定义的接口类型,使用 as Lib
interface Lib {
(): void;
version: string;
doSomething(): void;
}
let lib: Lib = (() => {}) as Lib;
lib.version = "1.0";
lib.doSomething = () => {};
这样一个接口就实现了,但
全局变量lib,是一个单例,要想创建多个lib,需使用函数封装,将其定义在一个getLib函数中,返回lib,这样就可以创建多个实例了
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();
除此之外,接口还可以定义类的结构和类型