【发布时间】:2021-02-22 20:37:25
【问题描述】:
我编写了一个 Fetch 包装器来使用 Typescript 获取我的 API。我想,当我从我的 API 取回我的数据时,从“任何”类型到我的例如:“用户”类型。
我给你贴一个我的代码框的链接:https://codesandbox.io/s/react-query-error-rkmv1
当我 console.log 在 onSuccess 回调(甚至直接在 fetch 中)时,即使 Typescript 编译器没有抱怨,并且我可以将获取的数据用作“用户”,如果我记录此用户,它不是真正的用户。这是一个我可以“作为”用户使用的对象,但不能作为“用户”使用。
我可以就这样离开它,因为它最终会起作用,而且我的结果是典型的,但我担心它会带来其他我没有想到的问题。
谢谢!
【问题讨论】:
-
我曾经遇到过同样的强迫症问题,我发现了一个有用的打字稿泛型,叫做
Partial。它基本上采用您的界面并使其成为“部分”版本,因此在您的演员阵容中使用data as Partial<T>...我猜试试 -
感谢您的回答。我试过但它不起作用,我让我的“发布”函数返回 Promise
> 和我的 fetch(..).then(data => data as Partial 但这没有任何改变:|跨度> -
它并不是真的要改变任何东西,除了你的 tpyings,它更灵活地适应你所处的场景,说你请求的返回数据可能是你返回的部分版本已定义...typescriptlang.org/docs/handbook/utility-types.html
-
尝试像这样
function post<T>(input: Request | string, body: object, init?): Promise<Partial<T>> { ... }将返回定义添加到您的函数中 -
是的,我所做的,但最后,我的对象仍然是来自 API(任何)的对象,而不是我定义的对象(User 或 UserWithtoken)
标签: reactjs typescript fetch-api react-typescript react-query