typescript GraphQL中用于表示语言的“元组”枚举

ru9i0ody  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(126)

我想在我的GraphQL模式中使用以下代码表示多种语言:

  • 语言的ISO名称
  • 语言自身的外来语
  • 其ISO 639-1编码
  • 其ISO 639-3编码

理想情况下它看起来像

enum Language {
  (English, English, en, eng)
  (German, Deutsch, de, deu)
  (Mandarin, 官话, zh, cmn)
  (Cantonese, 廣東話, zh, yue)

因为每个值的组合都必须是唯一的。然而,GraphQL不支持这种表示,所以我想到了这种变通方法:

type Language {
  isoLanguageName: ISOLanguageName!
  endonym: LanguageEndonym!
  iso639_1: ISO639_1
  iso639_3: ISO639_3
}

enum ISOLanguageName {
  English
  German
  Mandarin
  Cantonese
}

enum LanguageEndonym {
  English
  Deutsch
  官话
  廣東話
}

enum ISO639_1 {
  en
  de
  zh
}

enum ISO639_3 {
  eng
  deu
  cmn
  yue
}

但我一点也不赞成,因为它没有指定值之间定义所必需的关系。
我如何通过模式中的这些数据来表示语言?

0pizxfdo

0pizxfdo1#

GraphQL没有定义枚举的有效组合所需的语义。您的类型就像这样很好。我建议创建一个包含所有语言定义的JSON文件,并根据需要导入它(除非您更喜欢在数据库表中导入)。还建议ID作为Language类型用于缓存。
要导入JSON文件:

import languages from 'languages.json';

languages.json:(作为以语言代码为键的对象,也可以作为数组)

{
  "en" : {
    "isoLanguageName": "English",
    "endonym": "English",
    "iso639_1": "en",
    "iso639_3": "eng"
  },
  "de" : {
    "isoLanguageName": "German",
    "endonym": "Deutsch",
    "iso639_1": "de",
    "iso639_3": "deu"
  },
  …more languages
}

相关问题