如何实现具有多个函数调用签名的打字稿接口
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
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