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
相关产品推荐
相关产品推荐

