#freeze TypeScript で、クラスのメンバ関数を、変数に入れる方法と、それをコールする方法です。 いわゆる メンバ関数ポインタ です。 メンバ関数を入れる変数の型は、普通の関数の場合と同じように、 #prettify{{ var func : (arg:number)=>string; }} みたいな感じでOK。 コールするときは、 #prettify{{ func.call( クラス実体, 第1引数, 第2引数, ・・・ ); }} という風にします。 以下、自分への備忘録を兼ねたサンプルコードです。 参考になれば幸いです。 #prettify{{ class CUser { constructor( private m_name:string, private m_money:number ){ } GetName( n : number ): string{ return this.m_name; } GetMoney( n : number ): string{ return (this.m_money + n).toString(); } }; const table : { [key: string]: (arg:number)=>string } = { // "(arg:number)=>string" っていうのが関数の型 "名前": CUser.prototype.GetName, // クラス名.ptorotype.メンバ関数名 ってする。 "所持金": CUser.prototype.GetMoney, // クラス名.ptorotype.メンバ関数名 ってする。 }; const users : CUser[] = [ new CUser("一郎", 100 ), new CUser("二郎", 200 ), new CUser("三郎", 300 ) ]; for( let userNo in users ){ let s : string = `UserNo:${userNo} `; for( let key in table ){ let t = table[key].call( users[userNo], 99 ); // オブジェクト.call() で第1引数に this となるオブジェクトを指定。第2引数以降に関数の引数を指定。 s += `${key}は${t}。`; } console.log(s); } // 出力結果 // > UserNo:0 名前は一郎。所持金は199。 // > UserNo:1 名前は二郎。所持金は299。 // > UserNo:2 名前は三郎。所持金は399。 }}
(This host) = https://thinkridge.com