如何在枚举中声明字符串
How to declare strings in enum
使用 graphql,enum
可以创建一个预定义的元素列表,但字符串不起作用。
例如:
enum Dias {
lunes
martes
miércoles
jueves
viernes
sábado
domingo
}
这returns一个错误GraphQLError: Syntax Error: Cannot parse the unexpected character "\u00E9".
如何制作预定义的字符串列表?
编辑:为了提供更多上下文,我想反映数据库模式,就像这样(使用猫鼬):
dias: {
type: String,
enum: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo'],
lowercase: true,
required: true
}
您的语法是正确的,唯一的问题是不支持“é”和“á”字符。 specification 概述了命名操作、字段等的规则。支持的模式是:
/[_A-Za-z][_0-9A-Za-z]*/
此外:
Names in GraphQL are limited to this ASCII subset of possible characters to support interoperation with as many other systems as possible.
因此,不幸的是,您必须将这些重音字符转换为有效字符才能使您的模式被视为有效。
编辑: 您可以创建自定义标量。这是一个接受名称、描述和数组以及 returns 自定义标量的函数:
const makeCustomEnumScalar = (name, description, validValues) => {
const checkValue = (value) => {
const coerced = String(value)
if (!validValues.includes(coerced)) {
throw new TypeError(`${coerced} is not a valid value for scalar ${name}`)
}
return coerced
}
return new GraphQLScalarType({
name,
description,
serialize: checkValue,
parseValue: checkValue,
parseLiteral: (ast) => checkValue(ast.value),
})
}
现在您可以执行以下操作:
const DayOfWeek = makeCustomEnumScalar('Day of Week', 'day of week enum', [
'lunes',
'martes',
'miércoles',
'jueves',
'viernes',
'sábado',
'domingo'
])
将其添加到您的解析器:
const resolvers = {
DayOfWeek,
// Query, Mutation, etc.
}
你的类型定义:
scalar DayOfWeek
然后您可以像使用任何其他标量一样使用它。如果查询提供的输入或输出无效值,GraphQL 将像枚举一样抛出错误。唯一需要注意的是,如果您直接在查询中输入值(而不是使用变量),您仍然需要将它们用双引号引起来。
使用 graphql,enum
可以创建一个预定义的元素列表,但字符串不起作用。
例如:
enum Dias {
lunes
martes
miércoles
jueves
viernes
sábado
domingo
}
这returns一个错误GraphQLError: Syntax Error: Cannot parse the unexpected character "\u00E9".
如何制作预定义的字符串列表?
编辑:为了提供更多上下文,我想反映数据库模式,就像这样(使用猫鼬):
dias: {
type: String,
enum: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo'],
lowercase: true,
required: true
}
您的语法是正确的,唯一的问题是不支持“é”和“á”字符。 specification 概述了命名操作、字段等的规则。支持的模式是:
/[_A-Za-z][_0-9A-Za-z]*/
此外:
Names in GraphQL are limited to this ASCII subset of possible characters to support interoperation with as many other systems as possible.
因此,不幸的是,您必须将这些重音字符转换为有效字符才能使您的模式被视为有效。
编辑: 您可以创建自定义标量。这是一个接受名称、描述和数组以及 returns 自定义标量的函数:
const makeCustomEnumScalar = (name, description, validValues) => {
const checkValue = (value) => {
const coerced = String(value)
if (!validValues.includes(coerced)) {
throw new TypeError(`${coerced} is not a valid value for scalar ${name}`)
}
return coerced
}
return new GraphQLScalarType({
name,
description,
serialize: checkValue,
parseValue: checkValue,
parseLiteral: (ast) => checkValue(ast.value),
})
}
现在您可以执行以下操作:
const DayOfWeek = makeCustomEnumScalar('Day of Week', 'day of week enum', [
'lunes',
'martes',
'miércoles',
'jueves',
'viernes',
'sábado',
'domingo'
])
将其添加到您的解析器:
const resolvers = {
DayOfWeek,
// Query, Mutation, etc.
}
你的类型定义:
scalar DayOfWeek
然后您可以像使用任何其他标量一样使用它。如果查询提供的输入或输出无效值,GraphQL 将像枚举一样抛出错误。唯一需要注意的是,如果您直接在查询中输入值(而不是使用变量),您仍然需要将它们用双引号引起来。