2017-10-11 3 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]]() 
関連する問題