スキーマでクエリを定義するとき、以前に宣言された GraphQLEnumType の値を参照して、それを引数のデフォルト値として使用するにはどうすればよいですか?
ObservationPeriod
次のGraphQLEnumTypeを定義したとしましょう:
observationPeriodEnum = new GraphQLEnumType {
name: "ObservationPeriod"
description: "One of the performance metrics observation periods"
values:
Daily:
value: '1D'
description: "Daily"
[…]
}
クエリ引数のタイプとして使用しますperiod
。
queryRootType = new GraphQLObjectType {
name: "QueryRoot"
description: "Query entry points to the DWH."
fields:
performance:
type: performanceType
description: "Given a portfolio EID, an observation period (defaults to YTD)
and as-of date, as well as the source performance engine,
return the matching performance metrics."
args:
period:
type: observationPeriodEnum
defaultValue: observationPeriodEnum.Daily ← how to achieve this?
[…]
}
現在、実際の'1D'
文字列値をデフォルト値として使用しています。これは機能します:
period:
type: observationPeriodEnum
defaultValue: '1D'
しかし、Daily
代わりにシンボリック名を使用する方法はありますか? スキーマ自体で名前を使用する方法が見つかりませんでした。私が見落としているものはありますか?
列挙型が一連の定数としても動作し、スキーマ定義で次のように使用できることを期待していたので、私は尋ねています:
period:
type: observationPeriodEnum
defaultValue: observationPeriodEnum.Daily
単純な回避策:
##
# Given a GraphQLEnumType instance, this macro function injects the names
# of its enum values as keys the instance itself and returns the modified
# GraphQLEnumType instance.
#
modifiedWithNameKeys = (enumType) ->
for ev in enumType.getValues()
unless enumType[ ev.name]?
enumType[ ev.name] = ev.value
else
console.warn "SCHEMA> Enum name #{ev.name} conflicts with key of same
name on GraphQLEnumType object; it won't be injected for value lookup"
enumType
observationPeriodEnum = modifiedWithNameKeys new GraphQLEnumType {
name: "description: "Daily""
values:
[…]
これにより、スキーマ定義で必要に応じて使用できます。
period:
type: observationPeriodEnum
defaultValue: observationPeriodEnum.Daily
name
もちろん、この修飾子は、enum 名が GraphQLEnumType の既存のメソッドおよび変数名 (現在は、description
、_values
、_enumConfig
、_valueLookup
、_nameLookup
、getValues
、および— 687 行付近のクラスの定義を参照serialize
)parseValue
に干渉しない限り、その約束を果たします_getValueLookup
。https://github.com/graphql/graphql-js/blob/master/src/type/definition.js#L687で)_getNameLookup
toString
GraphQLEnumType