为函数定义接口,我无权访问该声明

Posted

技术标签:

【中文标题】为函数定义接口,我无权访问该声明【英文标题】:Define Interface for function, for which I do not have access to the declaration 【发布时间】:2017-06-06 21:53:38 【问题描述】:

有没有办法定义函数参数采用哪些参数和哪些类型的参数。例如:

我想使用 TypeScript 来声明 boundTransportFn 的接口是什么。该参数的类型是一个函数,但我如何使用 TypeScript 来定义该函数需要哪些参数?

重要提示:此函数 (boundTransportFn) 是我无权访问的用户提供的函数。换句话说,我无法访问 boundTransportFn 声明,我只有参数

【问题讨论】:

我相信大多数人都投了反对票,因为您将代码作为屏幕截图包含在内,这是不受欢迎的。确实,为什么您曾经会选择包含代码的图片,而不是代码本身?请记住,您是在寻求帮助,人们会免费帮助您:您应该让他们尽可能轻松地帮助您。没有人会费心手动输入代码来验证问题,因为它可以简单地复制粘贴。 *** 具有代码格式化和语法高亮功能。问题的内容很好,IMO。 那么反对者应该提到这一点;感谢您的反馈;我仍然认为我不能很好地回答这个问题。 【参考方案1】:

是的,有:

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


let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) 
    let result = source.search(subString);
    return result > -1;

请注意,这直接来自official Typescript handbook。 ;-)

所以,以你为榜样:

interface BoundFunc 
  // Put your definition here


// Then, somewhere else:
export class MyClass 

  myMethod(boundTransportFn: BoundFunc) 
    return function(boundTransportFn) 
      // ...
    
  


MyClass.myMethod()的用户必须遵守BoundFunc接口。

【讨论】:

但是,您确定这适用于我在问题中描述的情况吗?此函数 (boundTransportFn) 是我无权访问的用户提供的函数。换句话说,我无法访问 boundTransportFn 声明,我只有参数。 我不确定我是否理解您的问题。在您的代码中向boundTransportFn 函数添加类型只需将单词Function 替换为您在代码中声明的接口名称即可。您没有为您的代码提供太多上下文,但假设它位于接收 boundTransportFn 作为参数的方法中,任何调用您的方法的用户都必须提供正确类型的参数,否则 TypeScript 编译器会抱怨。有意义吗? 我会在这里继续投票,但我相信另一个答案是我正在寻找的答案【参考方案2】:

我不确定我是否正确理解了这个问题,但是您可以通过以下方式声明一个参数,该参数是一个接受两个参数的函数 - anystring - 并返回 void(我认为当我查看您的代码时,函数的类型应该是):

return function (boundTransportFn: (a: any, key: string) => void) 

另请参阅handbook 中的“编写函数类型”部分。

【讨论】:

以上是关于为函数定义接口,我无权访问该声明的主要内容,如果未能解决你的问题,请参考以下文章

11. 接口

函数式接口

技术杂记

C++友元成员函数

C++友元成员函数

C++友元成员函数