2017-10-11 177 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]]()