示例如下:
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
如果您有一些限制,重载很有用。
例如,您的返回类型取决于第三个参数:
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