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,这种不一致导致文件内出现多条错误。
现寻求以下问题的解答:
- 如何在 TypeScript 版 Expo 应用中正确集成并使用 react-native-gifted-charts 库的 BarChart 组件?
- 为何自动生成的 NativeModules.js 文件后缀为 .js 却包含 TypeScript 类内容?
- 有哪些解决 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
相关产品推荐
相关产品推荐

