我已经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**;
}
答案 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应该确实允许我们按对象而不是按类添加标量,这很奇怪。我从模式优先切换到代码优先,并遇到了这个问题。