Closed6
API Factory
const userApiRepository = (axios: any) => {
const END_POINT = '/user'
return {
show(id: string) {
axios.get(`${END_POINT}/${id}`)
},
update(id: string, payload: any) {
axios.put(`${END_POINT}/${id}`, payload)
}
}
}
const companyApiRepository = (axios: any) => {
const END_POINT = '/company'
return {
show(id: string) {
axios.get(`${END_POINT}/${id}`)
}
}
}
const repositories = {
user: userApiRepository,
company: companyApiRepository
}
export const apiFactory = <K extends keyof typeof repositories>(repoKey: K) => {
const Axios: any = {}
const repository = repositories[repoKey]
return repository(Axios)
}
apiFactory('user')
型補完が効かなくて悲しい😢
本当はupdate
も出て欲しい
export const apiFactory = <K extends keyof typeof repositories>(repoKey: K) => {
const Axios: any = {}
const repository = repositories[repoKey]
return repository(Axios) as ReturnType<typeof repositories[K]>
}
上記のように戻り値に対して型定義することで期待していた型定義になることが確認できた。
ちなみに、
export const apiFactory = <K extends keyof typeof repositories>(repoKey: K): ReturnType<typeof repositories[K]> => {
const Axios: any = {}
const repository = repositories[repoKey]
return repository(Axios)
}
だとエラーになる。なんでだろうなぁ...
aspidaを拡張する形でuseApi
みたいな感じでこの形式を採用するのはありかなと思った。
今度ラップしてみよう。
このスクラップは2021/10/12にクローズされました