TypeScript ジェネリック型は関数の引数から推論する

以下のようなコードはコンパイルエラーになります。

const promise = new Promise(resolve => resolve(45))
promise.then(result => result * 4) // Object is of type 'unknown'.

Promiseの引数には関数が渡されていますが、この関数からは result の型が推論できないため Object is of type 'unknown’. のエラーになります。

Promiseのジェネリック型パラメータを明示的にアノテートする必要があります。

const promise = new Promise<number>(resolve => resolve(45))
promise.then(result => result * 4)

上記のようにすることで resolve で返される戻り値の型が number であることを TypeScript に知らせることができます。