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

TypeScript Expo应用集成react-native-gifted-charts遇NativeModules异常求助

Expo TypeScript 集成 react-native-gifted-charts 问题

我用 Expo CLI 的 TypeScript 模板,通过命令 expo init appName 创建了一个简单的 TypeScript 应用,运行正常。但集成 react-native-gifted-charts 库添加柱状图时遇到问题。

尝试使用 BarChart 组件的代码片段:

import { BarChart } from "react-native-gifted-charts";
...
...

<View style={styles.chartContainer}>
          <BarChart
            data={Data}
            width={300}
            height={200}
            chartConfig={{
              backgroundGradientFrom: "#1E2923",
              backgroundGradientTo: "#08130D",
              fillShadowGradient: "#45E355",
              fillShadowGradientOpacity: 0.8,
              color: (opacity = 1) => `rgba(255, 255, 255, ${opacity})`,
              labelColor: (opacity = 1) => `rgba(255, 255, 255, ${opacity})`,
              style: {
                borderRadius: 16,
              },
            }}
            style={{
              marginVertical: 8,
              borderRadius: 16,
            }}
          />
        </View>

使用上述代码时,报错指向 NativeModules.js 文件。检查发现该文件后缀为 .js,但内容却类似 TypeScript,这种不一致导致文件内出现多条错误。

现寻求以下问题的解答:

  1. 如何在 TypeScript 版 Expo 应用中正确集成并使用 react-native-gifted-charts 库的 BarChart 组件?
  2. 为何自动生成的 NativeModules.js 文件后缀为 .js 却包含 TypeScript 类内容?
  3. 有哪些解决 NativeModules.js 文件相关错误的建议?

解答

1. TypeScript 版 Expo 正确集成 react-native-gifted-charts 的步骤

  • 安装库:直接在 Expo 项目中运行 npm install react-native-gifted-charts 或 yarn add react-native-gifted-charts,该库纯 JS/TS 实现,无需额外配置原生依赖。
  • 修正组件用法:chartConfig 是其他图表库(如 react-native-chart-kit)的属性,react-native-gifted-charts 的 BarChart 不支持该属性,需改用库自身的配置 props。示例代码:
import { BarChart } from "react-native-gifted-charts";

// 标准数据格式示例
const chartData = [
  {value: 30, label: 'Jan'},
  {value: 50, label: 'Feb'},
  {value: 40, label: 'Mar'},
];

// 组件使用
<View style={styles.chartContainer}>
  <BarChart
    data={chartData}
    width={300}
    height={200}
    barWidth={25}
    barBorderRadius={8}
    color="#45E355"
    labelTextStyle={{color: '#fff', fontSize: 12}}
    yAxisTextStyle={{color: '#fff'}}
    style={{marginVertical: 8, borderRadius: 16}}
  />
</View>
  • 类型支持:若库未自带 TypeScript 类型,可安装 @types/react-native-gifted-charts(如果存在),或在项目的 declarations.d.ts 中添加临时声明:
declare module 'react-native-gifted-charts' {
  export class BarChart extends React.Component<any> {}
}

2. NativeModules.js 后缀与内容不一致的原因

这种情况属于依赖库的打包发布错误:

  • react-native-gifted-charts 在发布时可能未正确将 TypeScript 源码编译为纯 JavaScript,误将保留了类型注解、泛型等 TS 语法的文件命名为 .js 后缀。
  • 当你的 TypeScript 项目解析该文件时,会因为后缀是 .js 而按 JavaScript 规则处理,但文件内的 TS 语法不符合 JS 规范,从而抛出错误。

3. 解决 NativeModules.js 相关错误的建议

  • 清理缓存重装依赖:删除 node_modules、package-lock.json/yarn.lock,重新执行 npm install/yarn install,再运行 expo r -c 清理 Expo 缓存。
  • 调整 TypeScript 配置:在 tsconfig.json 中忽略该文件或关闭 JS 文件检查:
{
  "compilerOptions": {
    "allowJs": true,
    "checkJs": false
  },
  "exclude": [
    "node_modules/react-native-gifted-charts/src/NativeModules.js"
  ]
}
  • 更换库版本:尝试安装该库的最新版或稳定旧版本,比如 npm install react-native-gifted-charts@latest,查看是否修复了打包问题。
  • 临时手动修复:找到 node_modules/react-native-gifted-charts/src/NativeModules.js,移除其中的 TypeScript 语法(如类型注解、泛型声明)转为纯 JS,但该方式在重装依赖后会失效,仅作临时应急用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:31:03