微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以使用枚举作为属性名称创建graphql 类型?

如何解决是否可以使用枚举作为属性名称创建graphql 类型?

我有一个枚举,我正在尝试使用该枚举创建一个 GraphQl 类型。这种新类型中的每个属性都可以是可选的。每种类型返回相同的类型。

以下是枚举的示例:

enum AccountTypeEnum {
 AccountType1
 AccountType2
 AccountType3
 AccountType4
 AccountType5
 AccountType6
}

我想使用枚举创建一个类型,所以我不需要输入每个类型。这是一个缩短的版本,但有 20 多个 accountTypes - 每个都返回一组余额。

这是我想要的类型:

type BalanceList {
 AccountType1: [Balances]
 AccountType2: [Balances]
 AccountType3: [Balances]
 AccountType4: [Balances]
 AccountType5: [Balances]
 AccountType6: [Balances]
}

是否可以在不输入整个 Enum 的情况下创建 BalanceList?

此外,对于每个 Id 可能只有几个 AccountType,所以我需要考虑到这一点。例如:用户 1 可以有 AccountTypes 1 和 3(只有 AccountType1 和 AccountType3 会出现在响应对象上,其他 AccountTypes 不会出现在对象上)

我在文档中找不到这个,所以我不确定这是否可行

解决方法

如果您需要一个编程模式,您可以在服务器启动时构建它。您一直在以架构定义语言 (SDL) 呈现架构,但您可能可以在运行时构建其中的一部分并将其与 SDL 架构的其余部分一起传递给 typeDefs and resolvers

这很复杂,而且可能是个坏主意。拥有静态模式有很多优点,这也是 GraphQL 的价值之一。静态模式很容易诊断。它允许在构建时通过许多工具检查查询的有效性(也许您现在不需要它,但可能会出现需要)。如果您的目标是避免维护 20 行代码,则可能不值得。

我认为您想要的是重新设计您的架构,以便“动态”部分成为建模数据的一部分。下面是一个例子:

type BalanceList {
  balancesByType: [AccountTypeBalance!]!
}
type AccountTypeBalance {
  accountType: AccountTypeEnum!
  balances: [Balance!]!
}

可以简化。假设您打算在 BalanceList 类型中使用 User,您甚至可能不需要 BalanceList 类型。下面呢

type User {
  balanceList: [AccountTypeBalance!]!
}

这非常适合您的奖金要求,因为现在对于 user1,您可以返回一个只有两个元素的 balanceList。结果如下:

const user = {
  id: "user1",balanceList: [
    { accountType: "AccountType1",balances: [ balance1,balance2 ] },{ accountType: "AccountType3",balances: [ balance3,balance4,balance5 ] },],};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。