can';t使用类型';对象';对于类型GraphQL字段类型
我想为我的NestJSAPI创建一个GraphQL层。因此,基于这个持有键/值对的接口can';t使用类型';对象';对于类型GraphQL字段类型,graphql,nestjs,typegraphql,Graphql,Nestjs,Typegraphql,我想为我的NestJSAPI创建一个GraphQL层。因此,基于这个持有键/值对的接口 export interface Mapping { id: string; value: object; } 我创建了一个DTO作为GraphQL查询的返回类型 @ObjectType() export class MappingDTO { @Field(() => ID) id: string; @Field() value: object; } 所以当我想找到所有的映
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();
}
我得到这个错误
错误:无法确定getValueByKey的GraphQL输出类型
听起来您应该使用自定义JSON标量。喜欢 然后可以直接在字段装饰器中使用:
@Field(() => GraphQLJSONObject)
value: object
或者,您可以将decorator保留为
@Field()
,并将相应的scalarsMap
添加到传递给buildSchema
的选项中。有关更多详细信息,请参阅。只是为了指出一个事实,即GraphQL的整个思想是声明性数据获取。
此外,您还可以在GraphQL中定义自定义类型标量类型没有对象作为选项,但您可以这样定义自己的类型
type customObject {
keyOne: Int!
KeyTwo: String!
...
key(n): ...
}
并在接口、查询、转换中使用此类型:
export interface Mapping {
id: string;
value: customObject;
}
您可能会认为,您必须在这个类型的customObject中定义存储在mongoDB中的对象的每个键,但您不必这样做。这就是GraphQL声明性数据获取的用武之地。您只需在前端使用的类型(customObject)中定义这些字段,无需从DB获取完整的对象。祝福您@daniel rearden!
type customObject {
keyOne: Int!
KeyTwo: String!
...
key(n): ...
}
export interface Mapping {
id: string;
value: customObject;
}