После игры я нашел что-то, что я могу использовать, чтобы обойти мою первоначальную проблему, поэтому я опубликую это здесь на случай, если кому-то еще будет интересно то же самое.
Итак, моя первоначальная проблема была вкратце, что я получаю несколько разных «доступных сервисов» из разных сервисов, и я подумывал сопоставить их с enum для лучшей поддержки машинописи и т. Д. Но проблема заключалась в том, что если бы я получить неизвестное значение из другого сервиса, мой graphql не удастся.
Так что моей первоначальной идеей было исправить это с помощью директивы, с которой я все-таки начал работать:
# In schema
directive @mapUnknownTo(value: String) on ENUM
enum SomeAttribute @mapUnknownTo(value: "__UNKNOWN__") {
SomeAttribute1
AnotherAttribute
SomethingElse
__UNKNOWN__
}
И реализация директивы:
import { SchemaDirectiveVisitor } from 'graphql-tools';
import { GraphQLEnumType } from 'graphql';
export class MapUnknownToDirective extends SchemaDirectiveVisitor {
visitEnum(type: GraphQLEnumType) {
const { value = '__UNKNOWN__' } = this.args;
const valueMap = type.getValues().reduce((map, v) => map.set(v.value, v.name), new Map<string, string>());
type.serialize = (v: string): string => valueMap.get(v) || value;
}
}
Таким образом, все значения, не определенные в схеме, будут преобразованы в какое-то пользовательское значение, которое не совсем то, что я изначально хотел, но, по крайней мере, не выдает ошибку, так что все в порядке.
Я все еще не уверен на 100%, являются ли директивы подходящим вариантом для подобных случаев, но, по крайней мере, это одно из возможных решений.