如何在Nest.js代码第一个方法中使用graphql-type-json标量

时间:2019-11-01 14:41:55

标签: graphql nestjs

我已经npm安装了graphql-type-json和类型。 如何在代码优先的方法中使用它,在下面的示例中JSONObject是标量。

import {Field, Int, InputType} from 'type-graphql';
import {Direction, MessageType} from '../interfaces/message.interface';

@InputType()
export class MessageInput {
    @Field()
    readonly to: string;
    @Field()
    readonly type: MessageType;
    @Field()
    readonly direction: Direction;
    @Field()
    readonly body: **JSONObject**;
}

3 个答案:

答案 0 :(得分:1)

您可以使用the approach described in the docs创建一个@Scalar()类型

答案 1 :(得分:1)

我找到了这种方法,并且对我有用。可能不是代码优先的方法,但我想它是足够的,直到您弄清楚了:)

import { Field, ObjectType } from 'type-graphql';
import JSON from 'graphql-type-json';

@ObjectType()
export class YourClass {
  @Field(() => JSON)
  myProperty: any;
}

答案 2 :(得分:0)

这不是超级优雅,但是我通过创建一个包装了@Scalar对象的装饰GraphQLJSON的类来做到这一点:

// json.scalar.ts
import { Scalar, CustomScalar } from '@nestjs/graphql';
import * as GraphQLJSON from 'graphql-type-json';

@Scalar('JSON', type => Object)
export class JsonScalar implements CustomScalar<string, any> {
  name = GraphQLJSON.name;
  description = GraphQLJSON.description;

  serialize = GraphQLJSON.serialize;
  parseValue = GraphQLJSON.parseValue;
  parseLiteral = GraphQLJSON.parseLiteral;
}

然后我刚刚在模块的JsonScalar部分中添加了resolvers

您可以在带有@Query(returns => Object)的解析器中使用它,与其他需要指定嵌套类型的地方也一样,只是Object

Nestjs应该确实允许我们按对象而不是按类添加标量,这很奇怪。我从模式优先切换到代码优先,并遇到了这个问题。