node.js - 如何在 Typescript 中重新导入模块

标签 node.js typescript

我对 typescript 相当陌生,但我认为这个问题实际上与 Node.js 间接相关。不管怎样,我正在尝试编写一个小型 Node 库,并且我正在使用 Typescript。 我有一个类,比方说:

    //foo.ts
    export class Foo {
        constructor(options:Options = {}) { ... }
    }

但是,考虑到我的库的性质,大多数情况下直接使用此类是不可取的,因此我还导出一个模块

    //module.ts
    import { Foo } from './foo'

    let instance
    ... // other methods
    export function init(options: Options) {
        instance = new Foo(options)
    }

一切都按我的预期进行。我遇到的问题是为 module.ts 编写单元测试。我需要编写几个测试用例,但是一旦我调用 module.init(options) 一次,实例就会被创建并作为 Node 缓存模块,在我的测试文件中再次导入它仍将具有 foo 实例。在普通的 javascript 中,我使用了 proxyquire生成模块的其他实例,但似乎它与 typescript 配合得不太好...我如何“强制” Node “重新导入”模块的“干净”实例?

最佳答案

How would I "force" node to "re-import" a "clean" instance of my module?

一个简单的工厂方法,例如改变

//foo.ts
export class Foo {
    constructor(options:Options = {}) { ... }
}

致:

//foo.ts
class Foo {
    constructor(options:Options = {}) { ... }
}
export const create(options: Options): Foo {
   return new Foo(options);
}

关于node.js - 如何在 Typescript 中重新导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53586268/

相关文章:

javascript - Atom typescript 插件找不到名称 'describe'

javascript - 有没有办法让未链接的节点不以半径分布?

javascript - 即使它是全局变量,也无法比较类内部变量的值

jquery - 使用JQuery刷新消息,类似于node中的rails flash或connect-flash

javascript - 如何在 watch 模式下进行任何 mocha 测试之前运行全局设置脚本

javascript - 如何在 typescript 中定义动态泛型约束

node.js - 如何配置 axios 使用 SSL 证书?

node.js - 如何在与 axios 的 react 中映射新帖子?

node.js - 如何将 SQL 转换为 Mongoose 查询 api

python - 从 node.js 执行 python 脚本