2017-10-11 175 views
0

如何將一個事件連接到我定義爲字符串的函數名稱?我試過這[funcName],但我得到一個錯誤:「類型沒有索引簽名」?按名稱獲取函數描述符:

什麼是應該是這個[someData [key]]來獲得當前類的委託的名稱。

測試代碼示例:

<div data-eventclick='ClickHandler' /> 
... 
public someFunction(domContex: HTMLElement) { 
    let someData = domContext.dataset; 
    someData.filter(key => string.prototype.startsWith("event")) 
      .foreach(key => domContext.bind(key.substr(5), this[someData[key]]); 
} 

// It's can be as the result of this[someData[key]] 
public ClickHandler() { 
    ... 
} 
+1

這是同一個人重複問題:https://stackoverflow.com/questions/46694669/typescript-how-to-get-功能按姓名 –

回答

0

您可以將索引簽名添加到您的類:

class YourClass { 
    [key: string]: Function; 

    public someFunction(domContex: HTMLElement) { 
     let someData = domContext.dataset; 
     someData.filter(key => string.prototype.startsWith("event")) 
      .foreach(key => domContext.bind(key.substr(5), this[someData[key]]); 
    } 
} 

但是,這迫使你的所有集體成員是功能,所以你不能有其他屬性。


或者,如果你只是想繞過類型檢查,你可以只投this任何和訪問功能。請注意,您將失去任何類型的檢查,一旦你投以any

(this as any)[someData[key]]()