Skip to main content

interface

interface 和 type 的区别

可被调用的类型(函数)

[[函数重载]]

通过 interface 创建一个可调用的类型,实质上是创建一个函数结构

// 通过 interface 创建一个可调用的类型
interface Overloaded {
(foo: string): string;
(foo: number): number;
}

// 声明这个类型
// 实现接口的一个例子:
function stringOrNumber(foo: number): number;
function stringOrNumber(foo: string): string;
function stringOrNumber(foo: any): any {
if (typeof foo === 'number') {
return foo * foo;
} else if (typeof foo === 'string') {
return `hello ${foo}`;
}
}

const overloaded: Overloaded = stringOrNumber;

// 调用使用
const str = overloaded(''); // str 被推断为 'string'
const num = overloaded(123); // num 被推断为 'number'
// 上面声明采用内联也是同价的
let overloaded: {
(foo: string): string;
(foo: number): number;
};

可被实例的类型(被new实例)

声明一个可被 new 关键字实例化的类型结构,我们可以:

// 创建这个可被实例化的类型
interface CallMeWithNewToGetString {
new (): string;
}

// 声明这个类型
declare const Person :CallMeWithNewToGetString

// 实例化
const tar = new Person()

map的key类型限制

export interface DirInfoObject {
[name: string]: string;
}