[英]can't use type 'object' for Type-GraphQL field types
我想为我的 NestJs API 创建一个 GraphQL 层。 所以基于这个接口持有一个键/值对
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
用于 value 字段。 我收到这个错误
NoExplicitTypeError: 您需要为 MappingDTO#value 提供显式类型!
将类型更改为string
,启动时不会引发错误。 问题是我无法指定显式类型,因为我的 MongoDB 存储了包含“任何东西”的对象。
如何修复解析器或 DTO 以处理对象类型?
编辑:
解析器装饰器也是如此。 当我有这个
@Query(() => Object)
public async getValueByKey(@Args('id') id: string): Promise<object> {
return this.mappingsService.getValueByKey(id);
}
我收到这个错误
错误:无法确定 getValueByKey 的 GraphQL 输出类型
只是要指出一个事实,即 GraphQL 的整个想法是声明性数据获取。 您也可以在 GraphQL 中定义自定义类型,标量类型没有对象作为选项,但您可以像这样定义自己的类型。
type customObject {
keyOne: Int!
KeyTwo: String!
...
key(n): ...
}
并在接口、查询、突变中使用这种类型:
export interface Mapping {
id: string;
value: customObject;
}
您可能认为您必须在这种类型的 customObject 中定义存储在 mongoDB 中的对象的每个键,但您不必这样做。 这就是 GraphQL 声明式数据获取的用武之地。您只需在要在前端使用的类型 (customObject) 中定义那些字段,无需从 DB 获取完整的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.