我想创建一个带有Axios示例的复杂类型名API,这样我就可以像这样使用基本示例:
api.get("url")...
而且能够具有新的动态机构,例如:
api.myApi.get("url")
最后,能够像这样阅读示例列表:
api.list
一定要回来
myApi语言
当我想扩展AxiosInstance或者向主示例注入属性时,我总是得到一个类型错误。
我的测试:
type apiInstances = Record<string, AxiosInstance>
type apiList = Record<'list', string[]>
let api: apiInstances | apiList
const instance = (baseURL: string) =>
axios.create({
baseURL
})
const instances = { instance('myApi') }
api = { ...instances, ...instance(''), list }
写入api.myApi.get("...")
时出错
类型“apiInstances”上不存在属性“myApi|api列表'
4条答案
按热度按时间j91ykkif1#
我认为你已经走上了一条好的道路。你能做的最好的事情就是抽象出axios客户端,就像你对另一个http客户端所做的那样,并隐藏axios实现。为此,你可以为
然后使用可链接函数,您将在其中注入类,这些类隐藏了其中使用axios。
这是一个帮助的例子,如果你想在你的http客户端上执行额外的功能,无论是axios,fetch或任何你想要的:-)
2nc8po8w2#
https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeystype
pokxtpni3#
我找到了解决办法:
就像一个符咒
gj3fmq9x4#
可以使用typed-axios-instance包获取路由,并将其转换为一个完全类型化的axios示例: