graphql - 无法将类型 'object' 用于 Type-GraphQL 字段类型

标签 graphql nestjs typegraphql

我想为我的 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/

相关文章:

reactjs - 无法查询 allMarkdownRemark graphql 上的字段

entity-framework - 如何处理数据加载器/GraphQL 嵌套查询中的并发 DbContext 访问?

javascript - 如何访问 GraphQL 解析器中的请求对象(使用 Apollo-Server-Express)

sequelize.js - 在 nestjs/sequelize 上的 sequelize-typescript 中定义关系时出错

dependency-injection - 使用依赖注入(inject)将 Feathers 应用程序对象传递给 TypeGraphQL

javascript - Apollo 链接状态 : How to write Query resolvers?

javascript - Nest.js 中的可选身份验证 @nestjs/passport

node.js - Mongoose/MongoDb 在数组中查找具有反向引用的文档

typescript - 使用 webpack 和 babel-loader 进行转译时,TypeGraphQL @Arg 装饰器失败并出现解析器错误

mysql - 当 GraphQL 查询只需要返回对象的某些字段时,为什么 MySQL/Sequelize 执行全选查询?