【问题标题】:Jest does not recognize my custom typingsJest 无法识别我的自定义类型
【发布时间】:2019-05-20 01:45:12
【问题描述】:

我有一个 typescript 项目,该项目需要一个个人库,该库从它作为 commonjs 库构建的 git repo 添加到我的package.json。当我运行我的构建脚本./node_modules/.bin/webpack -d --config webpack/webpack.dev.js 时,一切都会正确编译。但是,当我运行 jest jest --config front/jest.config.js 时,它会抛出以下错误:

● Test suite failed to run
TypeError: dumblib_1.default is not a constructor

12 | const dumblib = new DumbLib(vars)

当进入 lib 的入口点时,它只是一个从 es6 编译到 commonjs 的节点项目,包在文件末尾显示:

module.exports = DumbLib;

该库不是打字稿,所以我的主项目中有一个用于哑库导入的打字文件。

declare module 'dumblib' {
  .
  .
  .

  export default class DumbLib {
    constructor(vars: Vars)
    .
    .
    .
  }

}

就像我说的,打字稿编译器似乎认为一切都正确编译。但是,jest 不断抛出该错误。为了识别我的打字,我需要做些什么特别的事情吗?或者是否还有其他一些我没有看到的不一致之处?

【问题讨论】:

    标签: typescript webpack jestjs


    【解决方案1】:

    这里的问题是你的模块的实际导出与类型不匹配。由于类型的原因,TypeScript 期望从模块中“默认”导出(你说 export default),但是在模块类内部是整个导出。

    做这两件事应该会有所帮助:

    1. 当您导入模块时,请确保它是这样的:
    import * as dumblib from "dumblib";
    
    1. 在您的类型定义中应该是:
    declare module 'dumblib' {
    
      class DumbLib {
        // ...
      }
    
      namespace DumbLib {
        interface Foo {
          bar: string
        }
      }
    
      export = DumbLib
    }
    

    【讨论】:

    • Hrm... 我还从该模块导出了另一个接口,当我进行更改时,我在我的 linter 中看到:`导出分配不能在具有其他导出元素的模块中使用。`
    • @unflores 我更新了一个示例以包含命名空间,这是您可以从模块中导出更多内容的方式。
    猜你喜欢
    • 2021-09-06
    • 2017-12-04
    • 2019-07-10
    • 1970-01-01
    • 2017-05-01
    • 2020-10-20
    • 2022-12-03
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多