Node+TypeScript项目导入JSON配置出现default属性的解决办法
default属性的来源
这个属性是ES模块和CommonJS模块的互兼容逻辑自动生成的:
JSON文件本身不存在默认导出和命名导出的区分,当你使用import * as defconfig的语法导入JSON时,运行环境(Node/打包工具)会把JSON的原始内容挂载到模块的default导出项上,同时为了兼容命名导入的写法,会在模块顶层为JSON的每个属性生成Getter。你打印出来的顶层[Getter]和多余的default属性都是这个互操作逻辑的产物。
解决方法
有三种可行的处理方案:
方案1:修改导入语法(最推荐)
先确认你的tsconfig.json中已经开启以下两个配置:{ "compilerOptions": { "resolveJsonModule": true, "esModuleInterop": true } }之后把导入语句改为默认导入即可直接拿到原始JSON对象,没有多余属性:
import defconfig from '../configuration/config.json';方案2:直接取default属性
如果不想修改tsconfig配置,直接从导入的命名空间中取default属性即可得到原始配置对象:import * as defconfig from '../configuration/config.json'; const realConfig = defconfig.default; // 后续直接使用realConfig进行展开、assign操作即可方案3:手动读取解析JSON
如果不想依赖模块导入的兼容逻辑,可以手动读取文件后解析,得到纯对象:import fs from 'fs/promises'; // 异步读取示例,同步读取可以用fs.readFileSync const defconfig = JSON.parse(await fs.readFile('../configuration/config.json', 'utf-8'));
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

