如何将事件挂钩到我定义为字符串的函数名?我试过这个[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() {
...
}
答案 0 :(得分: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并访问该函数。请注意,一旦转换为any
,您将失去任何类型检查:
(this as any)[someData[key]]()