为什么TypeScript会将导入的JSON文件内容识别为空对象
问题原因
TypeScript将导入的JSON识别为空对象{}是配置问题导致的,具体原因如下:
- 你没有在
tsconfig.json中开启resolveJsonModule配置项。这个配置是TypeScript官方提供的JSON文件导入支持开关,未开启时TypeScript不会解析JSON文件的实际内容结构,会直接将所有导入的JSON文件的类型默认设置为{}。 - 即使开启了
resolveJsonModule,如果你的tsconfig.json的include字段没有覆盖到对应的JSON文件,TypeScript也无法读取JSON的内容推导类型,只会识别为空对象。 - 空对象类型
{}没有定义string类型的索引签名,自然不满足Record<string, unknown>的参数要求,就会抛出你遇到的类型报错。
修复方案
方案1(推荐,永久生效)
修改tsconfig.json,补全以下配置:
{ "compilerOptions": { "resolveJsonModule": true, // 开启JSON导入类型解析 "esModuleInterop": true // 兼容默认导入JSON的语法 }, "include": ["src/**/*", "config.json"] // 确保你的config.json在TS的解析范围内,按实际路径调整 }
配置生效后TypeScript会自动根据config.json的内容推导导入的data类型为{ attribute: string },完全兼容Record<string, unknown>的类型要求,报错会自动消失。
方案2(临时修复,无需改配置)
给导入的data手动增加类型断言,跳过类型校验:
import data from './config.json' // 或者直接在传参时断言:this.initConfig(data as Record<string, unknown>) const typedData = data as Record<string, unknown>
内容的提问来源于stack exchange,提问作者Slim
相关产品推荐
相关产品推荐

