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



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

下面是Enum:的一个例子

enum AccountTypeEnum {
AccountType1
AccountType2
AccountType3
AccountType4
AccountType5
AccountType6
}

我想使用枚举创建一个类型,这样我就不需要键入每个类型。这是一个缩短的版本,但有20多个accountTypes,每个都返回一系列余额。

这就是我想要的类型:

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

是否可以在不键入整个枚举的情况下创建BalanceList?

此外,对于每个Id,可能只有几个AccountTypes,所以我需要对此进行说明。例如:用户1可能具有AccountType1和3(只有AccountType1或AccountType3会出现在响应对象上,其他AccountTypes都不存在于对象上(

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

如果您需要一个编程模式,您可以在服务器启动时构建它。您一直在用模式定义语言(SDL(表示您的模式,但您可能会在运行时构建其中的一部分,并将其与SDL模式的其余部分一起传递给typeDef和解析器。

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

我认为你想要的是重新设计你的模式;动态的";部分成为建模数据的一部分。这里有一个例子:

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

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

type User {
balanceList: [AccountTypeBalance!]!
}

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

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

最新更新