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

React TypeScript中使用模板字面量导入JSON文件的报错与数据异常问题

React TypeScript 动态导入JSON文件的问题解决

第一个报错的原因

import()是异步加载模块的方法,它返回的是一个Promise<any>对象,而setData需要接收的是IData[]类型的数据(或者能生成该类型的函数),直接把Promise传给setData会触发类型不匹配的报错。

使用await后仍无法获取数据的原因

动态导入JSON文件时,ES模块会将JSON内容封装在模块对象的default属性里,你直接await priceRangeData拿到的是模块本身,不是JSON数据内容,所以无法正确赋值给state。

正确的实现代码

export interface IData {
  "BASE_PRICE": number;
  "TIER": string;
  "LIST_PRICE_MIN": number;
  "LIST_PRICE_MAX": number;
  "DISCOUNT_PART_NUM": Discount; // 建议修正拼写:Discout -> Discount
}

type Discount = {
  "D1RJ6LL": number;
  "D1RJ8LL": number;
  "D1RJALL": number;
};

const [data, setData] = useState<IData[]>([]);

useEffect(() => {
  fetchPrice(lang);
}, [lang]);

const fetchPrice = async (lang: string) => {
  if (lang) {
    // 异步加载JSON模块
    const priceRangeModule = await import(`../locales/${lang}.json`);
    // 提取模块default属性里的JSON数据,同时添加类型断言
    const priceData = priceRangeModule.default as IData[];
    setData(priceData);
  }
};

额外注意点

  • 确保../locales/${lang}.json的结构和IData[]完全匹配,否则类型断言可能引发运行时错误。
  • 若项目是Create React App,默认支持JSON导入;自定义Webpack配置的话,Webpack 5+已默认支持JSON导入,无需额外配置json-loader。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:15:33