TypeScript中导入JSON对象如何排除'default'键?
解决TypeScript导入JSON模块时多余'default'键的问题
在你的场景中,问题出在导入方式上——使用import * as会把整个模块对象(包含默认导出的default键)导入,而不是直接获取JSON的实际内容。结合你已开启的esModuleInterop和resolveJsonModule配置,有两种简单的解决方式:
方法1:直接使用默认导入
直接导入模块的默认导出,就能拿到仅包含152个国家键的对象:
import countries from "all-countries-and-cities-json"; console.log(Object.keys(countries).length); // 返回152
方法2:从命名空间导入中提取default属性
如果因需求必须保留import * as的导入方式,可以手动提取default属性:
import * as countriesModule from "all-countries-and-cities-json"; const countries = countriesModule.default; console.log(Object.keys(countries).length); // 返回152
原理说明
开启esModuleInterop后,TypeScript会自动将CommonJS格式的模块(包括JSON模块)适配为ES模块规范,其中JSON的内容会被作为模块的默认导出。所以用默认导入就能直接获取到纯净的国家数据对象,避免拿到包含default键的模块包装对象。
内容的提问来源于stack exchange,提问作者yarKo
相关产品推荐
相关产品推荐

