gpt4 book ai didi

graphql-js - 在 GraphQL 中,如何指定嵌套数组作为字段类型?

转载 作者:行者123 更新时间:2023-12-03 01:26:14 24 4
gpt4 key购买 nike

在 GraphQL 中,我尝试创建 GeoJSON 对象类型。

当我指定 4 维 GraphQLFloat 数组时,启动服务器时出现错误:

Error: Decorated type deeper than introspection query.

类型定义如下所示:

var GraphQLGeoJSON = new GraphQLObjectType({
name: 'GeoJSON',
fields: {
type: {
type: GraphQLString,
resolve: (obj) => obj.type,
},
coordinates: {
type: new GraphQLList(new GraphQLList(new GraphQLList(new GraphQLList(GraphQLFloat)))),
resolve: (obj) => obj.coordinates,
}
}
});

如何解决此错误?这是它在源代码中抛出的位置:

https://github.com/graphql/graphql-js/blob/568dc52a4f9cc9bdec4f9283e6e528970af06cde/src/utilities/buildClientSchema.js#L105

最佳答案

我们最终定义了 GeoJSON 标量类型而不是对象类型。这将使我们能够针对 GeoJSON 规范执行严格的验证。现在,为了让我们继续前进,我们定义了一个(完全未实现的)自定义 GeoJSON 类型:

var GeoJSON = new GraphQLScalarType({
name: 'GeoJSON',
serialize: (value) => {
// console.log('serialize value', value);
return value;
},
parseValue: (value) => {
// console.log('parseValue value', value);
return value;
},
parseLiteral: (ast) => {
// console.log('parseLiteral ast', ast);
return ast.value;
}
});

...这允许我们像这样使用它:

var Geometry = new GraphQLObjectType({
name: 'Geometry',
fields: () => ({
id: globalIdField('Geometry'),
geojson: {
type: GeoJSON,
},
},
};

您可以使用此策略定义自定义类型来表示数组的数组,或者定义自定义类型来仅表示嵌套数组,然后使用 new GraphQLList(CooperativeType) 等。这取决于您正在建模的数据。

关于graphql-js - 在 GraphQL 中,如何指定嵌套数组作为字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com