如何在TypeScript中实现NodeJS式的一行导入并调用模块函数?
在TypeScript中一行完成模块导入与函数调用
嘿,这个问题其实很好解决!在TypeScript里要实现和Node.js require那种一行导入加调用的效果,分两种情况来处理就行:
1. 支持Top-Level Await的环境(Node.js 14.8+/现代浏览器)
如果你的项目环境支持顶层await,那可以直接用同步风格的一行代码实现,和Node.js的require体验最接近:
(await import('./my-module')).default({ mysql: sequelizeO, logger: logger, sqlModel: sequelizeModels, sqlModelAlias: alias });
如果你的模块是命名导出而非默认导出,只需要把.default换成对应的导出名称即可:
(await import('./my-module')).MyModule({ mysql: sequelizeO, logger: logger, sqlModel: sequelizeModels, sqlModelAlias: alias });
2. 不支持Top-Level Await的环境
这种情况下可以用动态导入的Promise链式调用,虽然是异步的,但能实现一行代码的效果:
import('./my-module').then(mod => mod.default({ mysql: sequelizeO, logger: logger, sqlModel: sequelizeModels, sqlModelAlias: alias }));
为什么不能像静态导入那样直接写一行?
TypeScript的静态import语句有语法限制,必须作为独立的语句存在,不能和函数调用直接合并在同一行(这和Node.js的require不同,因为require是一个函数调用,本质是表达式,可以嵌入任何地方)。所以要实现一行操作,只能借助动态导入(import()函数),它返回一个Promise,允许我们在表达式中完成导入和调用的链式操作。
内容的提问来源于stack exchange,提问作者Jatt
相关产品推荐
相关产品推荐

