按名称获取函数描述符:

时间:2017-10-11 22:26:36

标签: typescript

如何将事件挂钩到我定义为字符串的函数名?我试过这个[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 个答案:

答案 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]]()