You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:30:27