【问题标题】:How to use Typescript enum that was exported from a .d.ts file?如何使用从 .d.ts 文件导出的 Typescript 枚举?
【发布时间】:2020-08-04 11:35:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: typescript graphql typescript-typings


    【解决方案1】:

    我通过将它添加到我的 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"
    

    【讨论】:

      【解决方案2】:

      试试

      constEnums: true
      

      在配置部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 2020-02-16
        • 2017-02-02
        相关资源
        最近更新 更多