TS中如何用ES6 import替代require构建数组并保持代码简洁?
解决方案
你可以根据你的项目配置选择以下任意一种方案,既符合TypeScript规范,又能保留近似原代码的简洁性:
方案1:直接保留
require语法(最省事,适合编译目标为CommonJS的项目)
只要你项目安装了Node.js类型声明包@types/node,TypeScript完全支持原生require语法,不需要做任何修改,原代码可以直接复用:const stuff = [ require("./elsewhere/part1"), require("./elsewhere/part2"), // ... ];没有安装依赖的话执行一行命令安装即可:
npm i @types/node -D方案2:用
createRequire模拟require(适合纯ESM规范的Node.js项目)
如果你的项目强制使用ESM模块规范,不能直接用require,可以用Node.js内置的createRequire方法创建兼容的require函数,只需要多写一行初始化代码:import { createRequire } from 'module' const require = createRequire(import.meta.url) const stuff = [ require("./elsewhere/part1"), require("./elsewhere/part2"), // ... ];这种写法完全符合ESM和TypeScript规范,运行效果和原代码完全一致。
方案3:用统一导出简化静态import写法(适合完全要改用静态ES import的场景)
如果你不想用任何CommonJS相关的语法,可以在模块所在的./elsewhere目录下新建index.ts统一导出所有子模块:// ./elsewhere/index.ts export { default as part1 } from './part1' export { default as part2 } from './part2' // 新增模块只需要在这里加一行导出然后在使用的地方一次性引入所有模块:
import * as parts from './elsewhere' const stuff = [parts.part1, parts.part2, /* ... */]后续新增模块只需要修改index.ts的导出,使用处的数组只需要加对应的属性名即可,维护成本很低。
内容的提问来源于stack exchange,提问作者404 Name Not Found
相关产品推荐
相关产品推荐

