0xf

日記だよ

typescript

関数の戻り値型の記述でジェネリクス型を利用すると unknown が出がち

特に理由もきちんと追えてないけど、ハマったやつもう一つ。最初 async function と Promise の固有の挙動かなと思ったけどそうではなかった。 // これは期待通り Rが推論される function sample<P, R, F extends (params: P) => { result: R }>(f: F, params: P) : R { return f(params).re</p,>…

高階関数の型定義で戻り値に ReturnType<T> を使う際に as を避けられないことへの納得

最初どうしてコンパイル通らないのか納得いかなかった function sample<T extends () => string>(f: T): ReturnType<T> { return f() // コンパイルエラーとなる } これがコンパイルエラーとなり、Type 'string' is not assignable to type 'ReturnType<T>' と言われてしまう。なん</t></t></t>…

久しぶりに typescript 書いてて型にハマるなどしていた

function wrapper<T extends (...args: any) => { Status: number, Result: any }>(f: T): T { return f } これを書き換えて、 function wrapper<T extends (...args: any) => { Status: number, Result: any }>(f: T, ...params: Parameters<T>): ReturnType<T> { return f(...params) // Type '{ Status: number; Result: </t></t></t></t>…