打字稿错误:“”仅引用类型,但在此处被用作命名空间

问题描述

我遇到了几个类似的问题,但无法解决这个问题。我一直在跟着2019年的教程一起学习,而我在找出正确的方法在2020年做同样的事情时遇到了麻烦。这是我犯错的那一行:

result_series = df["Value"].groupby(df.index // 4).sum()

ERROR: 'HotelsQuery' only refers to a type,but is being used as a namespace here.ts(2702)

我正在从我的generateModels文件(定义为:

)传递HotelsQuery
type IHotelsProps = HotelsQuery.Props<IHotelsBaseProps> & RouteComponentProps;

以及要传递给的类:

export type HotelsQuery = (
  { __typename?: 'Query' }
  & { hotels?: Maybe<(
    { __typename?: 'HotelTypeConnection' }
    & { edges: Array<Maybe<(
      { __typename?: 'HotelTypeEdge' }
      & { node?: Maybe<(
        { __typename?: 'HotelType' }
        & Pick<HotelType,'id' | 'title' | 'body'>
      )> }
    )>> }
  )> }
);

解决方法

所以我在the tutorial刺了一下,想解释一下几个部分是如何工作的。

首先,我只做前端部分,所以在运行yarn gql-gen时遇到了一个障碍,因为codegen.yml引用了后端服务器来获取类型(我想是吗?)>

overwrite: true
schema: "<http://localhost:8000/graphql/>"
documents: "src/**/*.ts"
generates:
    ./src/generatedModels.tsx:
        config: {}
        plugins:
            - "typescript-common"
            - "typescript-client"
            - "typescript-react-apollo"

这里schema指的是localhost,所以我认为您需要正确配置后端以公开/graphql/目录中的类型。我只是收到一个错误消息,说我没有消息来源,或者因为您设置了后端设置而没有发生,或者您发现另一种解决方法可能不正确。

user@computer simplenote % yarn gql-gen --config codegen.yml
yarn run v1.22.5
$ /.../simplenote/node_modules/.bin/gql-gen --config codegen.yml
/.../simplenote/node_modules/graphql/jsutils/devAssert.js:12
    throw new Error(message);
    ^

Error: Must provide Source. Received: undefined.

我确实要指出,路径node_modules/.bin/gql-gen指示了它实际使用的路径,即指向node_modules/graphql-code-generator/__/cli.js的链接,因此您实际上与yarn gpl-gen一起使用的库是{ {3}},因此其站点上的文档可能会有所帮助。

因此,我建议使用一些前进方式的选择:

  1. 查看graphql code generator文档中的config选项,自编写本教程以来,可能有一些默认选项发生了变化,特别是钩子取代了很多HOC,因此默认值可能有所不同是因为。
  2. 重新检查运行yarn gql-gen时后端部分是否正在运行,如果您在浏览器中转到http://localhost:8000/graphql/,我希望有某种数据转储,否则{{1} }可能无法获取生成相关类型定义所需的信息。
  3. 放弃使用HOC,因为它们会吸引并移动到graphql TypeScript React Apollo,本教程的其余部分可能仍然可以正常工作,只是您具有函数组件而不是类,并且可能从生成的代码中使用codegen.yml。我强烈建议使用钩子,这有一个很好的理由,那就是它们如此迅速地替换了HOC。

我希望以上两种情况中的一种或两种都能引导您正确地找出正确的狩猎方法:)