标签: graphql-codegen

graphql-codegen 未与配置文件一起运行

在我的package.json文件中,我有运行的脚本条目,graphql-codegen但它抱怨--config参数无效:

$> yarn gen
yarn run v1.21.1
$ graphql-codegen --config codegen.yml
Error: Unknown argument: config
...
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Run Code Online (Sandbox Code Playgroud)

由于我相信默认文件名codegen.yml无论如何,我尝试在没有该参数的情况下运行它并且没有生成任何内容:

$> yarn graphql-codegen
yarn run v1.21.1
$ /home/aaron/projects/my_app/node_modules/.bin/graphql-codegen
Done in 0.17s.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

graphql graphql-codegen

4
推荐指数
2
解决办法
4136
查看次数

返回 ENUM - 不能为不可为空的字段返回 null

我正在使用 apollo-server-lambda、Prisma ORM 和 graphql-codegen。

我有getBookById一个返回Book. Book包含一个名为 的枚举BookStatus。我希望能够在操场上以 ENUM 形式返回,但出现错误:

无法为不可为 null 的字段 Book.bookStatus 返回 null。

图书状态 - TypeDef

enum BookStatus {
  OPEN
  DRAFT
  CLOSED
}
Run Code Online (Sandbox Code Playgroud)

书籍 - TypeDef

type Book {
  id: ID!
  title: String!
  bookStatus: BookStatus!
}
Run Code Online (Sandbox Code Playgroud)

getBookById - TypeDef

type Query {
  getBookById(getBookByIdInput: GetBookByIdInput): Book
}
Run Code Online (Sandbox Code Playgroud)

游乐场错误

apollo apollo-server prisma graphql-codegen

4
推荐指数
1
解决办法
685
查看次数

当我映射和展平数组时,TypeScript 会错误地出错?

我正在使用 GraphQL Codegen 从我的 GraphQL 模式生成 TypeScript 类型。这是我的查询,我使用了一个片段,因此它只有易于导出的类型:

query reservationsPage($schoolSettingId: Int!, $day: UnixDate!) {
  roomsForSchoolSettingAll(schoolSettingId: $schoolSettingId) {
    ...reservationsPage
  }
}

fragment reservationsPage on Room {
    id
    name
    children {
      id
      name
      registrationToday(day: $day) {
        id
        checkIn
        checkOut
        importantInformation
        plannedCheckOut
        absent
        pickUpBy {
          id
          name
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

返回的数据如下所示:

const res = [
  {
    id: 1,
    __typename: "Room",
    name: 'Name 1',
    children: []
  },
  {
    id: 2,
    __typename: "Room",
    name: 'Name 2',
    children: [
      {
        id: 3,
        __typename: "ChildProfile",
        name: …
Run Code Online (Sandbox Code Playgroud)

typescript graphql-codegen

3
推荐指数
1
解决办法
321
查看次数

@graphql-codegen 创建的 `Exact<T>` 类型的目的是什么?

GraphQL 代码生成器在创建的 TypeScript 文件顶部创建此类型:

export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
Run Code Online (Sandbox Code Playgroud)

并将其用于所有客户端创建的查询变量:

src/foo.graphql

query Foo($id: ID!) {
  foo(id: $id) {
    bar
  }
}
Run Code Online (Sandbox Code Playgroud)

generated/foo.ts

...

export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };

...

export type FooQueryVariables = Exact<{
  id: Scalars['ID'];
}>;

...
Run Code Online (Sandbox Code Playgroud)

这种类型的目的是什么Exact<T>?它有何影响FooQueryVariables(相对于如果不存在的话)?


https://www.graphql-code-generator.com/#live-demo的完整演示

schema.graphql

schema {
  query: Query
} …
Run Code Online (Sandbox Code Playgroud)

typescript graphql graphql-codegen

3
推荐指数
1
解决办法
1282
查看次数

将类型分配给 Maybe 类型的嵌套类型的属性

我正在尝试将工具生成的类型分配给属性graphql-codegen。我尝试分配的类型是嵌套类型。给定以下类型:

type SomeType = {
  someKey: Maybe<
    { __typename?: "OtherType" | undefined } & 
    { someNestedKey: ({ __typename?: "AnotherType" | undefined } & Pick<AnotherType, "prop1" | "prop2">)[] } 
  >
}
Run Code Online (Sandbox Code Playgroud)

我需要能够做到:

myProperty: SomeType['someKey']['someNestedKey'] = []
Run Code Online (Sandbox Code Playgroud)

然而,我遇到的问题是 的类型someKey是一种Maybe类型,因此 Typescript 抱怨该类型没有someNestedKey属性<Maybe { __typename?: "OtherType" | ...} & { someNestedKey: (...)[] }>(即 的类型someKey)。

在 Typescript 中,您可以使用该!方法来声明您确定知道与undefinedand/or联合的类型的属性值null实际上在这种情况下存在。在分配类型时有没有办法做类似的事情?

由于我使用该graphql-codegen工具,因此我无法控制这些类型。

typescript graphql typescript2.0 graphql-codegen

2
推荐指数
1
解决办法
519
查看次数

Graphql Codegen - 具有自定义键 =&gt; 值的枚举

我使用 graphql-codegen 生成类型文件。

举个例子,假设我的schema.graphql文件中有以下内容:

enum cities {
 JOHANNESBURG
 CAIRO
 NEW_YORK
 LONDON
 BEIJING
}
Run Code Online (Sandbox Code Playgroud)

我的文件中的输出generated-types.ts如下:

export enum cities {
 Johannesburg = 'JOHANNESBURG'
 Cairo = 'CAIRO'
 NewYork = 'NEW_YORK'
 London = 'LONDON'
 Beijing = 'BEIJING'
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在 codegen 运行之前“覆盖”枚举的值?也许如下(我显然尝试过):

enum cities {
 JOHANNESBURG: 'JNB'
 CAIRO: 'CAI'
 NEW_YORK: 'NYC'
 LONDON: 'LON'
 BEIJING: 'BEI'
}
Run Code Online (Sandbox Code Playgroud)

这又应该产生:

export enum cities {
 Johannesburg = 'JNB'
 Cairo = 'CAI'
 NewYork = 'NYC'
 London = 'LON'
 Beijing = 'BEI'
}
Run Code Online (Sandbox Code Playgroud)

enums graphql graphql-codegen

2
推荐指数
1
解决办法
6368
查看次数

typescript 和 graphql-codegen 之间的枚举不匹配

我目前正在尝试解决以下问题,但还没有走得太远。目前,我正在运行 Apollo-Server 作为我的 graphQL 服务器,为 prisma2 配置了 postgres 数据库,并利用 graphql-codegen 从我的模式生成类型。目前,我正在尝试更新具有多对多关系的模型,并抛出非常奇怪的打字稿错误。我很确定我的更新不正确,但我看到的错误没有帮助。

以下是相关代码片段:

棱镜模式

model Permission {
  id       Int             @id @default(autoincrement())
  verb     PermissionVerb
  resource PermissionModel
  own      Boolean         @default(true)
  roles    Role[]
}
    
model Role {
  id          Int          @id @default(autoincrement())
  name        String
  permissions Permission[]
}

enum PermissionModel {
  USER
  ORDER
  CUSTOMER
  PERMISSION
  ROLE
}

enum PermissionVerb {
  CREATE
  READ
  UPDATE
  DELETE
}
Run Code Online (Sandbox Code Playgroud)

权限.gql

extend type Mutation {
  updatePermission(input: UpdatePermissionInput): PermissionResult!
}

union PermissionResult = Permission | PermRoleNotFoundError

type Permission {
  id: Int!
  own: …
Run Code Online (Sandbox Code Playgroud)

typescript graphql apollo-server prisma graphql-codegen

2
推荐指数
1
解决办法
3006
查看次数

如何向 GraphQL Codegen 添加自定义标量?

我的 GraphQL 模式中有一个自定义标量,我希望我的 Codegen 为我生成正确的类型。

我的架构如下所示:

scalar Decimal

type Item {
  price: Decimal!
}
Run Code Online (Sandbox Code Playgroud)

我为此标量添加了一个使用 [Decimal.js][1] 的自定义解析器。

当我从此架构生成 Typescript 类型时,我希望它能够识别price为 Decimal 类型并具有 Decimal.js 提供的属性。

我的代码生成配置如下所示:

schema: "./src/typeDefs/index.ts"
generates:
  ./src/types.d.ts:
    config:
      scalars:
        Decimal: Decimal
    plugins:
      - typescript
      - typescript-resolvers
Run Code Online (Sandbox Code Playgroud)

虽然这会生成Decimal类型,但它不会将其识别为 Decimal.js 的类型,因此它没有库公开的任何方法。

它生成以下类型:

export type Scalars = {
  ID: string;
  String: string;
  Boolean: boolean;
  Int: number;
  Float: number;
  Decimal: Decimal; // doesn't have any Decimal.js props
};
Run Code Online (Sandbox Code Playgroud)

如何告诉 codegen 使用 Decimal.js 生成正确的 Decimal 类型?[1]: https: //www.npmjs.com/package/decimal.js

javascript node.js graphql prisma graphql-codegen

2
推荐指数
1
解决办法
3692
查看次数