7️⃣

[TypeScript UtilityTypes] OmitThisParameter

2024/01/17に公開

TypeScript入門メモ
[Utility Types] OmitThisParameter について

OmitThisParameter<Type>

公式ドキュメント
https://www.typescriptlang.org/docs/handbook/utility-types.html#omitthisparametertype

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