0Pricing
TypeScript Academy · レッスン

タプルのrest要素、curryの型

タプルのrest要素で任意の引数リストを受け取り、型推論を活用した小さなcurryヘルパーを作ります

「タプルのrest要素、curryの型」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全3レッスンが含まれています。

概要

目標: 可変長タプルで引数リストを表現し、小さくても実用的な curry ヘルパーを作成します。これにより、API の柔軟性を保ちながら型安全性を維持できます。

可変長タプルの基本

[...A, L] パターンでは、最初に先頭の引数(A タプル)、次に最後の引数(L)が続きます。これはヘルパーの基礎となります。

type HeadTail<A extends any[], L> = [...A, L]

function callWithLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R, last: L, ...head: A): R {
  return fn(...head, last)
}

// Example
function join3(a: string, b: number, c: boolean) { return `${a}-${b}-${c}` }
const r = callWithLast(join3, true, "x", 42)   // ok → string

Curry ヘルパー

小さな curry を作成します。 [...A, L] により、先頭と最後の型がどちらも正しくなります。

function curryLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R) {
  return (last: L) => (...head: A) => fn(...head, last)
}

const curried = curryLast(join3)
const out = curried(true)("x", 42) // string

汎用的な curryFromFn

一般的な解決策: Parameters<F> から Tail/Last を推論し、パラメーターの数と型を維持します。

type Fn = (...args: any[]) => any

type Tail<T extends any[]> = T extends [...infer H, any] ? H : never

type Last<T extends any[]> = T extends [...any[], infer L] ? L : never

function curryFromFn<F extends Fn>(fn: F) {
  type A = Tail<Parameters<F>>
  type L = Last<Parameters<F>>
  return (last: L) => (...head: A) => fn(...head, last)
}

const cur = curryFromFn(join3)
const o2 = cur(true)("x", 42) // still string

タプルで組み合わせる

compose で A → B → C の流れを作ります。A のタプル引数は保持され、出力の型は連鎖します。

function compose<A extends any[], B, C>(g: (b: B) => C, f: (...args: A) => B) {
  return (...args: A): C => g(f(...args))
}

function len(a: string, b: number) { return `${a}${b}`.length }
function isEven(n: number) { return n % 2 === 0 }

const comp = compose(isEven, len)
const ok = comp("id", 99) // boolean

ヒント

ヒント:

可変長タプルには TS 4.0 以降が必要です。使用するターゲットを最新に保ってください。

コンパイラーにヒントを与えましょう。型パラメーターを明示的に記述すると、推論が改善する場合があります。

過度な汎用化は API 設計を複雑にします。単純なヘルパーが最も効果的です。

Curry シグネチャの確認

簡単な確認: curry ヘルパーで任意の引数 A と最後の引数 L を表現するシグネチャはどれですか。

振り返り

振り返り: [...A, L] で引数リストをモデル化し、小さな curry と compose のヘルパーを作成します。型は自動的に保持されます。

よくある質問

「タプルのrest要素、curryの型」レッスンは無料ですか?

はい。「タプルのrest要素、curryの型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全3レッスンが含まれています。

「タプルのrest要素、curryの型」で何を学びますか?

タプルのrest要素で任意の引数リストを受け取り、型推論を活用した小さなcurryヘルパーを作ります ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「タプルのrest要素、curryの型」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. タプルのrest要素、curryの型
  2. 関数と引数を安全に合成する
  3. 厳密に型付けされたビルダー
← TypeScript Academyに戻る