是否可以使用 属性 名称的枚举创建 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 ] },
],
};
我有一个枚举,我正在尝试使用该枚举创建一个 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 ] },
],
};