TL;DR

Functor[F[_]] のように、型コンストラクタ(型を受け取って型を返すもの)を引数に取る型。高階関数を型の世界に持ち込んだものに当たる。

仕組み

Effective TypeScript 項目50 では、ジェネリック型を「型に対する関数」と考える。この見方では、型パラメータを取る型をさらに引数に取るものが、高階関数に当たる高カインド型になる。TypeScript は今のところこれを表現できず、次のように型パラメータ F に型引数を渡そうとするとエラーになる。

type MapValues<T extends object, F> = {
  [K in keyof T]: F<T[K]> // type 'F' is not generic.
}

注意点

なぜ多くの言語はHigher Kinded Typesをサポートしないのか によると、ほとんどの言語は HKT をサポートしていない。高階単一化が必要になることや、型クラスの暗黙の解決が複雑になることから、実装が複雑になり、コンパイルも遅くなる。一方で、多くの実用アプリケーションは HKT がなくても困っておらず、増えるボイラープレートも今は AI が書ける。

関連

出典