如何实现具有多个函数调用签名的打字稿接口

How to implement a typescript interface having multiple function call signatures

interface SearchFunc {
  (source: string, subString: string): boolean;
 (source: string, subString: string,name:number): boolean;
}

是否可以有一个具有多个函数调用签名的接口?如果是这样,我该如何实施?你能给我一个有意义的例子吗?是否有任何用例,或者我是否以错误的方式思考/处理这个问题?

示例如下:


interface SearchFunc {
    (source: string, subString: string): boolean;
    (source: string, subString: string, name: number): boolean;
}

const fn: SearchFunc = (source: string, subString: string, name?: number) => true

但是,在你的情况下你不需要这样的界面。 这种技术称为 overloading

如果您有一些限制,重载很有用。

例如,您的 return 类型取决于第三个参数:

interface SearchFunc {
    (source: string, subString: string): boolean;
    (source: string, subString: string, name: number): string;
}

const fn: SearchFunc = (source: string, subString: string, name?: number) => null as any

const result = fn('sdf','sdf', 2) // string

const result1 = fn('sdf','sdf') // boolean

或下一个:

interface SearchFunc {
    (source: string, subString: number): boolean;
    (source: number, subString: string): string;

}

const fn: SearchFunc = (source: string | number, subString: string | number) => null as any

const result = fn('sdf', 2)

const result1 = fn(2, 'sdf')

const result2 = fn(2, 2) // error

const result3 = fn('2', '2') // error

函数类型允许 fn(2, 2),但接口不允许。接口 SearchFunc 在这里具有更高的优先级。

类型化参数:(source: string | number, subString: string | number) 应该与接口兼容。

因为根据接口 source 参数可以是字符串或数字,我们也应该在函数签名中将其定义为 string | (或)number