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

TypeScript中JSON导入与创建对象的相等性测试失败问题

解决TypeScript中JSON导入数组与手动数组的比较问题

问题出在你用import * as导入JSON的方式上:这种写法得到的是模块命名空间对象,而非直接的数组。该对象包含模块自带的Getter属性和default字段(真正的JSON数组存在default里),直接断言成City[]会把整个模块对象当成数组,自然和手动创建的纯数组结构不匹配,导致toEqual比较失败。

以下是几种可行的解决方法:

  • 直接导入JSON的default导出
    修改导入代码,直接获取JSON解析后的数组,需要确保tsconfig.json中启用了"esModuleInterop": true或"allowSyntheticDefaultImports": true:

    import citiesJson from '../resources/cities.json';
    const cities_test: City[] = citiesJson;
    
  • 手动提取模块中的default属性
    如果不想修改tsconfig配置,直接从导入的模块对象里取出default字段作为数组:

    import * as citiesJson from '../resources/cities.json';
    const cities_test: City[] = citiesJson.default as City[];
    
  • 深拷贝清除额外属性
    若导入对象仍存在模块相关的额外属性,可通过深拷贝将其转换为纯数组结构,彻底消除差异:

    import * as citiesJson from '../resources/cities.json';
    const cities_test: City[] = JSON.parse(JSON.stringify(citiesJson.default)) as City[];
    

另外需要注意:确保getSortedItems的排序逻辑完全一致,且两个数组中对象的name、population等值完全匹配(比如没有大小写差异、数值精度问题),避免因数据内容本身的不一致导致比较失败。

内容的提问来源于stack exchange,提问作者Testaastopp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:11:21