関数と引数を安全に合成する
引数のタプルと戻り値の型を維持しながら関数を合成し、型安全なpipe/composeヘルパーを記述します
「関数と引数を安全に合成する」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全3レッスンが含まれています。
概要
目標: 引数の情報を失わずに関数を組み合わせます。可変長タプルを使うと、pipe/compose ヘルパー全体で完全な args タプルを保持できます。
- 引数の個数と名前を保持する
- 各ステップで推論を維持する
anyもキャストも使わない
基本的な compose
compose: 最初の関数がすべての引数(...args: A)を受け取り、2 番目の関数がその出力を受け取ります。引数の個数と型は保持されます。
function compose<A extends any[], B, C>(g: (b: B) => C, f: (...args: A) => B) {
return (...args: A): C => g(f(...args))
}
function toLen(a: string, n: number) { return `${a}${n}`.length }
function isEven(x: number) { return x % 2 === 0 }
const c1 = compose(isEven, toLen)
const ok = c1("id", 99) // booleanPipe ヘルパー
pipe は同じ考え方を逆順で実装します。推論の流れがより直感的になります。
function pipe<A extends any[], B, C>(f: (...args: A) => B, g: (b: B) => C) {
return (...args: A): C => g(f(...args))
}
const p1 = pipe(toLen, isEven)
const ok2 = p1("xx", 7) // boolean3 つ以上の compose
3 つ以上の関数でも同じパターンを繰り返します。タプル A は保持され、中間の戻り値が連鎖します。
function compose3<A extends any[], B, C, D>(h: (c: C) => D, g: (b: B) => C, f: (...args: A) => B) {
return (...args: A): D => h(g(f(...args)))
}
function toUpper(s: string) { return s.toUpperCase() }
const c3 = compose3(toUpper, (x: number) => x.toString(), toLen)
const val = c3("a", 5) // "2" → then upper → "2"先頭を bind
bindHead: すべての引数を先頭に固定し、引数なしの関数を生成します。デモ用の例にすぎません(実際には Parameters を使って、より柔軟にできます)。
function bindHead<A extends any[], B>(fn: (...args: A) => B, ...head: A) {
return (...rest: []): B => fn(...head)
}
const bh = bindHead(toLen, "x", 42)
const r = bh() // numberヒント
ヒント:
ヘルパーでは any を避けてください。推論の連鎖が壊れてしまいます。
必要に応じて戻り値の型を明示してください。開発者体験が向上します。
複数段階の合成では、過度に汎用的なヘルパーではなく、小さなヘルパーを選んでください。
Compose シグネチャの確認
簡単な確認: 元の引数タプルを保持する compose のシグネチャはどれですか。
振り返り
振り返り: 可変長タプルで引数を保持しながら compose/pipe を作成しました。引数の個数と型を失わずに処理の流れを構築できます。
よくある質問
「関数と引数を安全に合成する」レッスンは無料ですか?
はい。「関数と引数を安全に合成する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全3レッスンが含まれています。
「関数と引数を安全に合成する」で何を学びますか?
引数のタプルと戻り値の型を維持しながら関数を合成し、型安全なpipe/composeヘルパーを記述します ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「関数と引数を安全に合成する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- タプルのrest要素、curryの型
- 関数と引数を安全に合成する
- 厳密に型付けされたビルダー