首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

标量

为了定义自定义标量,我们还必须创建一个类型定义和一个专用的解析器。在这里(如在官方文档中),我们将把graphql-type-json包用于演示目的。这个npm包定义了JSONGraphQL标量类型。首先,让我们安装包:

代码语言:javascript
复制
$ npm i --save graphql-type-json

安装包后,我们必须将自定义解析器传递给forRoot()方法:

代码语言:javascript
复制
import * as GraphQLJSON from 'graphql-type-json';

@Module({
  imports: [
    GraphQLModule.forRoot({
      typePaths: ['./**/*.graphql'],
      resolvers: { JSON: GraphQLJSON },
    }),
  ],
})
export class ApplicationModule {}

现在我们可以JSON在类型定义中使用标量:

代码语言:javascript
复制
scalar JSON

type Foo {
  field: JSON
}

定义标量类型的另一种形式是创建一个简单的类。假设我们想用Date类型增强我们的模式。

代码语言:javascript
复制
import { Scalar } from '@nestjs/graphql';
import { Kind } from 'graphql';

@Scalar('Date')
export class DateScalar {
  description = 'Date custom scalar type';

  parseValue(value) {
    return new Date(value); // value from the client
  }

  serialize(value) {
    return value.getTime(); // value sent to the client
  }

  parseLiteral(ast) {
    if (ast.kind === Kind.INT) {
      return parseInt(ast.value, 10); // ast value is always in string format
    }
    return null;
  }
}

之后,我们需要注册DateScalar为提供者。

代码语言:javascript
复制
@Module({
  providers: [DateScalar],
})
export class CommonModule {}

现在我们可以Date在类型定义中使用标量。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com