useSWRとio-tsを使うときに型を強めにするtypedFetcher
code:ts
// Strictly-typed fetcher
export function typedFetcher<T>(
typeC: t.Type<T>
): (input: RequestInfo, init?: RequestInit) => Promise<T> {
return async (input, init) => {
const res = await fetch(input, {
credentials: 'include',
mode: 'cors',
...init,
})
if (!res.ok) {
throw Error(res.statusText)
}
const json = await res.json()
const either = typeC.decode(json)
if (either._tag === 'Left') {
console.error(either.left)
throw either.left
}
return either.right
}
}
使うときはカリー化されているので、以下のようになる。
code:ts