7️⃣
[TypeScript UtilityTypes] OmitThisParameter
TypeScript入門メモ
[Utility Types] OmitThisParameter について
OmitThisParameter<Type>
公式ドキュメント
Typeからthisパラメータを削除する。Typeが明示的にthisパラメータを宣言していない場合、結果は単にTypeとなる。
そうでない場合、Typeからthisパラメータを持たない新しい関数型が生成されます。ジェネリックスは消去され、最後のオーバーロード・シグネチャのみが新しい関数型に伝搬されます。
function toHex(this: Number) {
return this.toString(16);
}
const fiveToHex: OmitThisParameter<typeof toHex> = toHex.bind(5);
console.log(fiveToHex());
使い所
高次関数またはコールバックでの使用
this パラメータを持つメソッドを、そのコンテキスト(クラスまたはオブジェクト)から切り離して渡す必要がある場合に使う。
例えば、クラスのメソッドをコールバックとして渡すが、そのメソッド内の this を使用しない場合に便利。
※ 関数型から this を省略するだけで、実行時に this が必要なメソッドに対して使うと、実行時エラーが発生する可能性があるので使和ない方が安全かもしれない。
class MyClass {
methodWithThis() {
console.log(this); // ここでの `this` は MyClass のインスタンス
}
}
function doSomething(callback: OmitThisParameter<() => void>) {
callback(); // ここでは `this` は不要
}
const myInstance = new MyClass();
doSomething(myInstance.methodWithThis);
Discussion