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
但是,在您的情况下,您不需要这样的界面。这种技术称为过载
如果有一些限制,重载很有用。
例如,您的返回类型取决于第三个参数:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句