gpt4 book ai didi

inheritance - 如何在 GraphQL 中继承或扩展 typeDef

转载 作者:行者123 更新时间:2023-12-04 14:39:16 27 4
gpt4 key购买 nike

我有一个 type User .用户也可以是type TeamMember . User 之间的唯一区别和 TeamMember是一个添加字段 teamRole: String .所以,我很想做类似下面的事情,以避免重复定义所有用户的字段......

  type User {
id: ID!,
name: String,
(many other field defs)
}

type TeamMember extends User {
teamRole: String,
}

有人知道这个的语法吗?我以为 extend将是答案,但它似乎更像是 javascript 的 prototype

最佳答案

使用像 graphql-s2s 这样的模式转译器来实现继承可能是矫枉过正,而且 graphql-s2s 到 2021 年就已经过时了。
看看这个 Apollo Server 指令:https://github.com/jeanbmar/graphql-inherits

const typeDefs = gql`
directive @inherits(type: String!) on OBJECT

type Car {
manufacturer: String
color: String
}

type Tesla @inherits(type: "Car") {
manufacturer: String
papa: String
model: String
}
`;

class InheritsDirective extends SchemaDirectiveVisitor {
visitObject(type) {
const fields = type.getFields();
const baseType = this.schema.getTypeMap()[this.args.type];
Object.entries(baseType.getFields()).forEach(([name, field]) => {
if (fields[name] === undefined) {
fields[name] = field;
}
});
}
}

关于inheritance - 如何在 GraphQL 中继承或扩展 typeDef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47523384/

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