我正在使用TypeScript中的一个小应用程序。它有一个上下文菜单模块,它有一个名为show
的方法,声明如下:
export var show = function (position: { top: number; left: number; },
optionList: { [name: string]: (...params: any[]) => any })
所以基本上我想在某个位置显示菜单并传递一个将字符串映射到函数的对象 - 这些是我的菜单中的项目和分配给它们的回调。我希望那些回调可以接受任何类型的任何数量的参数 - 这就是我理解我在这里使用的其余参数的方式。但是,当我尝试像这样调用我的函数时:
menu.show(
{
top: nativeEvent.clientY,
left: nativeEvent.clientX + 5
},
{
"Add elem...": (e: JQueryEventObject) => { }
});
我收到错误消息Call signatures of types '(e: JQueryEventObject) => void' and '(...params: any[]) => any' are incompatible
和Call signature expects 0 or fewer parameters.
谁能告诉我这里发生了什么?因为事实证明我完全不了解休息参数的概念。为什么编译器告诉我函数需要0个参数?如何让它期望任何数量的参数?
答案 0 :(得分:1)
由于其余参数暗示所有成员都是可选的,因此您传入的函数必须将其所有成员都作为可选(e?: JQueryEventObject) => { }
成员,例如:
var show = function (position: { top: number; left: number; },
optionList: { [name: string]: (...params: any[]) => any }){}
show(
{
top: 1,
left: 5
},
{
"Add elem...": (e?: any) => { } // Notice e is optional
});