hrp*_*xQ4 3 graphql nestjs typegraphql
我想为我的 NestJs API 创建一个 GraphQL 层。所以基于这个接口持有一个键/值对
export interface Mapping {
id: string;
value: object;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个 DTO 作为 GraphQL 查询的返回类型
@ObjectType()
export class MappingDTO {
@Field(() => ID)
id: string;
@Field()
value: object;
}
Run Code Online (Sandbox Code Playgroud)
所以当我想找到所有映射时,我会想出这个
@Query(() => [MappingDTO])
public async mappings(): Promise<Mapping[]> {
return this.mappingsService.getMappings();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不能object用于 value 字段。我收到这个错误
NoExplicitTypeError: 您需要为 MappingDTO#value 提供显式类型!
当改变类型时,例如string在启动时没有错误被抛出。问题是我无法指定显式类型,因为我的 MongoDB 存储了包含“任何东西”的对象。
如何修复解析器或 DTO 以处理对象类型?
编辑:
解析器装饰器也是如此。当我有这个
@Query(() => Object)
public async getValueByKey(@Args('id') id: string): Promise<object> {
return this.mappingsService.getValueByKey(id);
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
错误:无法确定 getValueByKey 的 GraphQL 输出类型
听起来您应该使用自定义 JSON 标量。像这个。
import { GraphQLJSONObject } from 'graphql-type-json'
Run Code Online (Sandbox Code Playgroud)
然后可以直接在字段装饰器中使用:
@Field(() => GraphQLJSONObject)
value: object
Run Code Online (Sandbox Code Playgroud)
或者您可以将装饰器保留为@Field()并将适当的添加scalarsMap到您传递给的选项中buildSchema。有关其他详细信息,请参阅文档。
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |