2014-01-12 65 views
0

我正在用TypeScript編寫一個小應用程序。它有一個上下文菜單,其中有一個叫show方法的模塊,聲明如下:瞭解TypeScript 0.9.5中的其餘參數

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 incompatibleCall signature expects 0 or fewer parameters.

誰能告訴我這到底是怎麼回事呢?因爲事實證明,我完全不瞭解其他參數的概念。爲什麼編譯器告訴我該函數需要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 
    });  
+1

對。我看着規範,不知何故錯過了。 「比較調用或構造簽名時,參數名稱將被忽略,並且其餘參數對應於其餘參數元素類型的可選參數的無限擴展。」非常感謝。 –