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

Is it possible create a graphql type using an enum for the property name?

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

这是枚举的示例:

enum AccountTypeEnum {
 AccountType1
 AccountType2
 AccountType3
 AccountType4
 AccountType5
 AccountType6
}

我想使用枚举创建一个类型,这样我就不需要逐一输入。这是一个简化版本,但有 20 多个帐户类型 - 每个都返回一个余额数组。

这就是我想要的类型:

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

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

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

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

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

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

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

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

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

type User {
  balanceList: [AccountTypeBalance!]!
}

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

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