【发布时间】:2021-01-07 23:12:44
【问题描述】:
我遇到了几个类似的问题,但无法解决这个问题。我一直在学习 2019 年的教程,但我无法找到在 2020 年做同样事情的正确方法。这是我遇到错误的行:
ERROR: 'HotelsQuery' only refers to a type, but is being used as a namespace here.ts(2702)
type IHotelsProps = HotelsQuery.Props<IHotelsBaseProps> & RouteComponentProps;
我从 generateModels 文件中传递 HotelsQuery,定义为:
export type HotelsQuery = (
{ __typename?: 'Query' }
& { hotels?: Maybe<(
{ __typename?: 'HotelTypeConnection' }
& { edges: Array<Maybe<(
{ __typename?: 'HotelTypeEdge' }
& { node?: Maybe<(
{ __typename?: 'HotelType' }
& Pick<HotelType, 'id' | 'title' | 'body'>
)> }
)>> }
)> }
);
以及它被传递给的类:
class Hotels extends React.Component<IHotelsProps, IHotelsState> {
constructor(props: IHotelsProps) {
super(props);
const query = queryString.parse(props.location.search);
this.state = {
searchQuery: query && query.search
? query.search.toString() : undefined
};
}
public render() {
const { searchQuery } = this.state;
const { data } = this.props;
return (
<Row>
<Col span={12} offset={6}>
<Divider>Add Hotel</Divider>
<Divider>Hotels</Divider>
<Input.Search
placeholder="Search..."
enterButton="Search"
defaultValue={searchQuery}
onChange={this.handleSearchQueryChange}
onSearch={this.handleSearch}
/>
{data!.loading ? (
<Spin style={{ marginTop: 16, display: 'block' }} /> )
: (
<div>
{data!.notes!.edges.map(edge => (
<Card
key={edge!.node!.id}
style={{ marginTop: 16 }}
actions={[
<Icon
type="delete"
key={edge!.node!.id}
onClick={() => this.handleDeleteHotel(edge!.node!.id)}
/>
]}
>
<Card.Meta
title={edge!.node!.title}
description={edge!.node!.body}
/>
</Card>
))}
</div>
)}
</Col>
</Row>
);
}
【问题讨论】:
-
您希望
HotelsQuery.Props解决什么问题? -
@TadhgMcDonald-Jensen 我刚刚将传递给它的类添加到最初问题中的代码中,如果有帮助吗?
-
不是真的,你说
HotelsQuery来自generatedModels文件,这是否意味着它是自动生成的?是什么决定了该类型看起来像这样,因为它看起来肯定不会支持您尝试使用它的方式。 -
@TadhgMcDonald-Jensen 我使用 yarn generate 从我的 yml 文件生成模型。由于我正在学习一个不是最近的教程,因此我必须假设依赖项交互的方式与以前不同
-
HotelsQuery是教程代码中的命名空间,而不是类型,因此解释了获取Props的语法,这是正确的和错误,因为您将其定义为类型。您的问题的根源是HotelsQuery定义不正确。它应该是一个带有 Props 属性的命名空间,这是一个泛型类型定义。我也不是说您上面对HotelsQuery的定义应该是命名空间中Props的定义。我没有完成教程。如果@TadhgMcDonald-Jensen 正在阅读本教程,他们将能够提供更多详细信息。
标签: typescript graphql apollo react-apollo graphql-codegen