标量
标量
为了定义自定义标量,我们还必须创建一个类型定义和一个专用的解析器。在这里(如在官方文档中),我们将把graphql-type-json
包用于演示目的。这个npm包定义了JSON
GraphQL标量类型。首先,让我们安装包:
$ npm i --save graphql-type-json
安装包后,我们必须将自定义解析器传递给forRoot()
方法:
import * as GraphQLJSON from 'graphql-type-json';
@Module{
imports: [
GraphQLModule.forRoot{
typePaths: ['./**/*.graphql'],
resolvers: { JSON: GraphQLJSON },
}),
],
})
export class ApplicationModule {}
现在我们可以JSON
在类型定义中使用标量:
scalar JSON
type Foo {
field: JSON
}
类
定义标量类型的另一种形式是创建一个简单的类。假设我们想用Date
类型增强我们的模式。
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
为提供者。
@Module{
providers: [DateScalar],
})
export class CommonModule {}
现在我们可以Date
在类型定义中使用标量。