为函数定义接口,我无权访问该声明
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】:
我不确定我是否正确理解了这个问题,但是您可以通过以下方式声明一个参数,该参数是一个接受两个参数的函数 - any
和 string
- 并返回 void
(我认为当我查看您的代码时,函数的类型应该是):
return function (boundTransportFn: (a: any, key: string) => void)
另请参阅handbook 中的“编写函数类型”部分。
【讨论】:
以上是关于为函数定义接口,我无权访问该声明的主要内容,如果未能解决你的问题,请参考以下文章