突然ですが、以下のJavaScriptプログラムに型をつけるとしたらどうするでしょうか。 function all(...callbacks) { return (x) => { for (const callback of callbacks) { callback(x); } } }最も自然な方法のひとつは、次のような型づけでしょう。 type Callback<T> = (value: T) => void; function all<T>(...callbacks: Callback<T>[]): Callback<T>;これ自体は最小限で最も正しい型をつけていて良いのですが、ユースケースによっては不便な場合があります。具体的には、以下のような「異なる型の汎用的なコールバックを組み合わせて特殊なコールバックを作る」という使い方です。 function cb1(value: { fo