【问题标题】:Is there a way to avoid circular type dependencies in GraqhQL?有没有办法避免 GraphQL 中的循环类型依赖?
【发布时间】:2017-07-15 19:03:28
【问题描述】:

考虑参考实现的主要 SWAPI 示例:https://github.com/graphql/swapi-graphql

//film.js
import PersonType from './person';

// person.js
import FilmType from './film';

到处都是。这些循环部门是可接受的做法吗?有什么好的模式可以避免这种情况吗?在 GraphQL 的最终演示中包含有问题的做法似乎很糟糕。

【问题讨论】:

  • 我认为你需要在你的问题中添加这个 |||||假设我有Type AType BType Ctype a 取决于type btype b 取决于type ctype c 取决于type a,下面的答案方法是否有效。
  • 3 dep 圈不是 2 dep 圈的一个特例吗?

标签: graphql graphql-js


【解决方案1】:

在 GraphQL 的情况下,这是一个不错的做法,他们甚至为这种情况准备了解决方案。如果你定义了某种类型的fields属性,你可以将它声明为一个函数

const User = new GraphQLObjectType({
    name: 'User',
    fields: () => ({
        id: { type: GraphQLID }
        // other attributes
    })
});

graphql-js 使用称为resolveThunk 的方法来处理fields 等属性,其实现如下

function resolveThunk<T>(thunk: Thunk<T>): T {
    return typeof thunk === 'function' ? thunk() : thunk;
}

如您所见,它检查thunk(本例中的字段)是否有效。如果是,则返回其结果,否则返回 thunk 本身。

【讨论】:

  • 假设我有Type AType BType Ctype a取决于type btype b取决于type ctype c取决于@9876543上述方法是否有效。
猜你喜欢
  • 2013-02-06
  • 1970-01-01
  • 2016-11-09
  • 2019-12-31
  • 2012-02-15
  • 2021-05-28
  • 2012-08-10
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多