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

Str*_*ch0 2 javascript node.js graphql prisma 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

Ber*_*rgi 5

Typescript 插件没有正确记录它,但在博客上提到了

  • 您可以从节点模块包 ( ) 导入类型User: models-lib#UserType
  • 您还可以映射到内置语言类型 ( DateType: Date)
  • 也可以对导入进行别名 ( User: ./models#User as MyCustomUserType)

不仅适用于mappers,也适用于scalars。所以你正在寻找

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