有没有办法避免GraqhQL中的循环类型依赖?

时间:2017-02-24 19:57:31

标签: graphql graphql-js

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

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

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

到处都是。这些循环代表是否可以接受?是否有任何好的模式可以避免这种情况?在GraphQL的最终演示中包含有问题的实践似乎很糟糕。

1 个答案:

答案 0 :(得分:3)

对于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本身。