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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:36:06