我想为我的 NestJs API 创建一个 GraphQL 层。所以基于这个接口(interface)持有一个键/值对
export interface Mapping {
id: string;
value: object;
}
我创建了一个 DTO 作为 GraphQL 查询的返回类型
@ObjectType()
export class MappingDTO {
@Field(() => ID)
id: string;
@Field()
value: object;
}
所以当我想找到所有映射时我会想出这个
@Query(() => [MappingDTO])
public async mappings(): Promise<Mapping[]> {
return this.mappingsService.getMappings();
}
不幸的是,我无法使用 object
作为值字段。我收到此错误
NoExplicitTypeError: You need to provide explicit type for MappingDTO#value !
当改变类型时,例如到 string
启动时不会抛出任何错误。问题是我无法指定显式类型,因为我的 MongoDB 存储包含“任何内容”的对象。
如何修复解析器或 DTO 来处理对象类型?
<小时/>编辑:
解析器装饰器也是如此。当我有这个时
@Query(() => Object)
public async getValueByKey(@Args('id') id: string): Promise<object> {
return this.mappingsService.getValueByKey(id);
}
我收到此错误
Error: Cannot determine GraphQL output type for getValueByKey
最佳答案
听起来您应该使用自定义 JSON 标量。喜欢this one .
import { GraphQLJSONObject } from 'graphql-type-json'
这可以直接在字段装饰器中使用:
@Field(() => GraphQLJSONObject)
value: object
或者您可以将装饰器保留为@Field()
,并将适当的scalarsMap
添加到传递给buildSchema
的选项中。请参阅the docs了解更多详细信息。
关于graphql - 无法将类型 'object' 用于 Type-GraphQL 字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60205466/