首页 > 解决方案 > 如何使用从 .d.ts 文件导出的 Typescript 枚举?

问题描述

我有一个自动生成类型的工具(graphql codegen)。在生成的类型定义文件中,它导出一个枚举

 export enum DevicesSortField {
  Name = 'NAME',
  ConfigurationStatus = 'CONFIGURATION_STATUS',
  Connectivity = 'CONNECTIVITY'
}

如果我尝试在我的 ts 文件中以某种方式使用枚举,例如在所有情况下切换 case,我会在运行时收到 MODULE_NOT_FOUND 错误。这是因为它试图从 js 转译代码中导入 d.ts 文件。但是根据js代码看不到typings文件!通常,字符串枚举在转译时会转换为对象,但我猜如果枚举位于 .d.ts 文件中,会有不同的行为。我该如何解决这个问题?

标签: typescriptgraphqltypescript-typings

解决方案


我通过将其添加到我的 codegen.yml 来修复它:

enumsAsTypes: true #needed to be able to compare enum cases in resolvers (since we are using a .d.ts)

所以文件看起来像这样:

overwrite: true
schema: "src/components/**/schema.ts"
documents: null
generates:
  src/typings/graphql-auto-codegen.d.ts:
    plugins:
      - "typescript"
      - "typescript-resolvers"
    config:
      useIndexSignature: true #fixes https://github.com/dotansimha/graphql-code-generator/issues/1133
      contextType: ./context#LockhartContext
      enumsAsTypes: true #needed to be able to compare enum cases in resolvers (since we are using a .d.ts)
  ./graphql.schema.json:
    plugins:
      - "introspection"

推荐阅读