【发布时间】:2020-10-19 08:48:38
【问题描述】:
我正在尝试让 useQuery 挂钩与 TypeScript 一起使用。
这是我的查询
export const FETCH_LINKS = gql`
query FetchLinks {
feed {
links {
id
createdAt
url
description
}
}
}
`;
我使用 graphql-codegen 从 GraphQL 模式生成类型
export type Feed = {
__typename?: 'Feed';
links: Array<Link>;
count: Scalars['Int'];
};
export type Link = {
__typename?: 'Link';
id: Scalars['ID'];
createdAt: Scalars['DateTime'];
description: Scalars['String'];
url: Scalars['String'];
postedBy?: Maybe<User>;
votes: Array<Vote>;
};
在我的组件中,我将类型应用于useQuery hook
const { data, loading, error } = useQuery<Feed>(FETCH_LINKS);
问题是在data 变量中,我收到了一个形状如下的对象:
{
feed: {
__typename
links
count
}
}
因此,为了遍历链接数组并将它们呈现在页面上,我需要执行 data.feed.links.map() 但 Feed 类型上没有 feed 属性,因此,我得到一个错误消息Property 'feed' does not exist on type 'Feed'
如何纠正这种不一致
【问题讨论】:
-
显而易见的解决方案是编辑
graphql-codegen生成的 Feed 类型,但感觉不是正确的方法 -
试试
useQuery<{ feed: Feed }>
标签: reactjs typescript graphql react-apollo apollo-client