node.js - 如何在 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来生成模块的其他实例,但它似乎不适用于打字稿......我将如何“强制”节点“重新导入”一个“干净”的实例我的模块?
解决方案
我将如何“强制”节点“重新导入”我的模块的“干净”实例?
一个简单的工厂方法,例如 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);
}
推荐阅读
- sql - I want to create an Excel like pivot using SQL
- javascript - How to use IMPORTXML function on google sheets scrape data of JavaScript content/elements from websites
- mongodb - 在 MongoDB 中重命名集合
- vue.js - 在 Vue 中访问 {__ob__: Observer}
- ios - 安装 React 时出现 React Native 错误(ReferenceError:找不到变量:React)?
- javascript - 温斯顿轮换日志文件名包括当天的日期
- android - 如何给 RotationAnimation 一个稳定的速度?
- javascript - 如何使用按钮删除由 document.createElement 创建的 div 和输入
- kotlin - 后按的 Kotlin 导航组件无法正常工作
- c# - 从连接字符串中转义特殊字符