TypeScript中如何获取当前模块的引用?
获取当前模块的上下文引用
当我们导入外部模块时,可以通过import * as foo from 'foo'的方式拿到整个模块的引用,进而调用模块内的成员:
import * as foo from 'foo'; foo.fn() foo['fn']()
但如果想在当前模块内拿到类似的上下文引用(比如示例里的thisModule),不同模块规范下的实现方式不一样:
ES模块(浏览器/现代Node.js)
方案1:手动导入自身模块
先导出当前模块的所有成员,再通过import * as语法导入自身:
// 导出模块内的成员 export function fn() { console.log('当前模块的fn被调用'); } export const demoVar = '测试变量'; // 导入当前模块自身 import * as thisModule from './当前模块文件名.js'; // 动态调用成员 thisModule['fn'](); console.log(thisModule['demoVar']);
方案2:统一导出一个模块对象
先定义包含所有成员的对象,再将其导出,之后直接使用这个对象作为模块上下文:
// 定义模块上下文对象 const thisModule = { fn() { console.log('当前模块的fn被调用'); }, demoVar: '测试变量' }; // 导出这个对象(默认导出或命名导出都可以) export default thisModule; // 直接用对象调用成员 thisModule['fn']();
CommonJS模块(Node.js传统环境)
在CommonJS里直接用module.exports就能拿到当前模块的上下文引用,注意如果要覆盖module.exports,需要先保存引用:
// 保存当前模块的上下文引用 const thisModule = module.exports; // 添加模块成员 function fn() { console.log('当前模块的fn被调用'); } thisModule.fn = fn; thisModule.demoVar = '测试变量'; // 动态调用成员 thisModule['fn'](); console.log(thisModule['demoVar']);
注意:ES模块没有全局的
module对象,无法直接获取模块上下文,必须通过手动导出导入的方式实现。
内容的提问来源于stack exchange,提问作者Mark_Sagecy
相关产品推荐
相关产品推荐

