使用Facebook的参考图书馆,我发现了一种方法破解泛型类型是这样的:如何使用模式语言创建泛型?
type PagedResource<Query, Item> = (pagedQuery: PagedQuery<Query>) => PagedResponse<Item>
interface PagedQuery<Query> {
query: Query;
take: number;
skip: number;
}
interface PagedResponse<Item> {
items: Array<Item>;
total: number;
}
function pagedResource({type, resolve, args}) {
return {
type: pagedType(type),
args: Object.assign(args, {
page: { type: new GraphQLNonNull(pageQueryType()) }
}),
resolve
};
function pageQueryType() {
return new GraphQLInputObjectType({
name: 'PageQuery',
fields: {
skip: { type: new GraphQLNonNull(GraphQLInt) },
take: { type: new GraphQLNonNull(GraphQLInt) }
}
});
}
function pagedType(type) {
return new GraphQLObjectType({
name: 'Paged' + type.toString(),
fields: {
items: { type: new GraphQLNonNull(new GraphQLList(type)) },
total: { type: new GraphQLNonNull(GraphQLInt) }
}
});
}
}
但我喜欢如何与阿波罗服务器,我可以声明创建模式。所以问题是,你们如何利用模式语言来创建泛型类型?
这是否意味着客户需要弄清楚返回哪种类型? – Birowsky
是的,客户端将不得不使用内联片段。不知道是否有一种很好的方式来执行您正在尝试完成的任务,而无需编程生成模式。看到我的编辑一些额外的想法。 –
欣赏努力 – Birowsky