首页 > 解决方案 > 如何在 Typescript 中重新导入模块

问题描述

我对打字稿相当陌生,但我认为这个问题实际上与 Node.js 间接相关。无论如何,我正在尝试编写一个小型节点库,并且正在使用 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)一次,就会创建实例并作为节点缓存模块,在我的测试文件中再次导入它仍然会有foo实例。在 vanilla javascript 中,我使用proxyquire来生成模块的其他实例,但它似乎不适用于打字稿......我将如何“强制”节点“重新导入”一个“干净”的实例我的模块?

标签: node.jstypescript

解决方案


我将如何“强制”节点“重新导入”我的模块的“干净”实例?

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

//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);
}

推荐阅读