किसी स्कीमा में किसी क्वेरी को परिभाषित करते समय, मैं एक तर्क के डिफ़ॉल्ट मान के रूप में उपयोग करने के लिए पहले घोषित किए गए ग्राफ़क्यूएलयूम टाइप के मान को कैसे संदर्भित करूं?ग्राफ़क्यूएलएनयूटी टाइप में डिफ़ॉल्ट रूप के रूप में ग्राफ़क्यूएल क्वेरी तर्क के नामों का उपयोग कैसे करें?
मान लीजिए कि 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
प्रतीकात्मक नाम के बजाय इस्तेमाल कर सकते हैं क्या है? मुझे स्कीमा के भीतर नामों का उपयोग करने का कोई तरीका नहीं मिला। क्या मैंने कुछ अनदेखा किया है?
मैं, पूछ रहा हूँ क्योंकि मैं भी स्थिरांक का एक सेट के रूप में व्यवहार करने के लिए, और स्कीमा परिभाषा इस तरह उन्हें उपयोग करने में सक्षम होने के लिए एक enum प्रकार उम्मीद कर रहा था:
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
बेशक, यह संशोधक अपने वादे fullfils, enum नाम GraphQLEnumType मौजूदा विधि और चर नाम के साथ हस्तक्षेप नहीं करते केवल जब तक (जो वर्तमान में कर रहे हैं: name
, description
, _values
, _enumConfig
, _valueLookup
, _nameLookup
, getValues
, serialize
, parseValue
, _getValueLookup
, _getNameLookup
और toString
- https://github.com/graphql/graphql-js/blob/master/src/type/definition.js#L687 में लाइन 687 के आसपास GraphQLEnumType
वर्ग की परिभाषा देखें)
हाय @ मैथ्यू हर्बस्ट, इस पर ध्यान देने और अपने अनुभव को साझा करने के लिए धन्यवाद - जो एक जीक्यूएल क्वेरी (यानी, रनटाइम »पर) में एक अनुमानित शाब्दिक मूल्य बताते हुए संबंधित है। मेरा प्रश्न हालांकि * स्कीमा घोषणा * के बारे में था: स्कीमा घोषित करते समय, शाब्दिक मूल्य को डुप्लिकेट करने के बजाय प्रतीक का उपयोग करके, गणना किए गए मानों में से किसी एक को कैसे एक्सेस किया जाए? - कि, «स्कीमा डिजाइन समय» पर, बल्कि «क्वेरी-टाइम/रनटाइम»। – Olivier