【问题标题】:How to implement a typescript interface having multiple function call signatures如何实现具有多个函数调用签名的打字稿接口
【发布时间】:2021-04-12 08:19:19
【问题描述】:
interface SearchFunc {
  (source: string, subString: string): boolean;
 (source: string, subString: string,name:number): boolean;
}

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

【问题讨论】:

  • 在上面的例子中它没有用,只需将name定义为可选:name?: number)

标签: typescript function interface


【解决方案1】:

示例如下:


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

【讨论】:

  • const result2 = fn(2, 2) // 错误 const result3 = fn('2', '2') // 错误..为什么这两个是错误的。上面的函数正在调用签名有四种可能的组合知道。实际上我对这个符号“我”很陌生,我很难理解
  • @somanraj 我更新了。您可以在文档typescriptlang.org/docs/handbook/functions.html#overloads 中找到更多信息
  • 你太棒了。你的回答更有意义
猜你喜欢
  • 2012-08-09
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 2012-11-13
  • 2016-04-04
  • 2017-09-13
  • 2017-08-31
  • 2021-04-18
相关资源
最近更新 更多