如果我导入一个外部模块,我可以通过导入的模块变量引用该模块中的项。
import * as foo from 'foo';
foo.fn()
foo['fn']()
但是如果我想做类似的事情,我如何获得对当前模块上下文的引用?
const thisModule = ???;
thisModule[`fn`]();
这样做看起来很愚蠢,但是您可以导入文件信息本身:
文件:foo.ts
export function foo() {
console.log('foo');
}
import * as self from './foo';
self.foo();
进一步探索,我尝试了一些我认为不会起作用的东西,但它确实起作用了!下面的解决方案包括一个自引用导入,它为我提供了一个对模块的变量引用。
在文件名foots
import * as local from './foo';
export function fn() {
console.log('fn()');
}
export class bar {
constructor() {
console.log('bar');
}
}
local['fn']();
new local['bar']();
// if using a variable
const c = 'bar';
new (<any>local>)[c]();
如果有人知道一个更规范的方式来完成这一点,我将感激反馈。