安装expo-camera@14.1.3后,导入CameraView等成员出现TS2305报错
问题原因及解决方案
核心原因:你安装的
expo-camera@14.1.3版本不支持CameraView和useCameraPermissions这两个API。这两个是expo-camera从15.0.0版本开始才新增的现代化API,14.x系列仍沿用旧的组件与权限处理逻辑。解决方案:
- 升级expo-camera版本:执行命令升级到15.x及以上版本(建议匹配你的Expo SDK版本,比如Expo SDK 49对应expo-camera@15.x,SDK 50对应expo-camera@16.x):
npm install expo-camera@latest # 或使用yarn yarn add expo-camera@latest - 无法升级时改用旧API:如果受限于项目依赖不能升级,直接替换为14.x版本兼容的写法:
- 用旧的
<Camera>组件替代CameraView - 用
requestCameraPermissionsAsync和getCameraPermissionsAsync方法替代useCameraPermissions,示例代码如下:import { Camera, CameraType } from 'expo-camera'; import { useState, useEffect } from 'react'; import { Button, View, Text } from 'react-native'; export default function CameraExample() { const [hasPermission, setHasPermission] = useState<boolean | null>(null); const [cameraType, setCameraType] = useState(CameraType.back); useEffect(() => { (async () => { const { status } = await Camera.requestCameraPermissionsAsync(); setHasPermission(status === 'granted'); })(); }, []); if (hasPermission === null) { return <View />; } if (hasPermission === false) { return <Text>无相机访问权限</Text>; } return ( <View style={{ flex: 1 }}> <Camera style={{ flex: 1 }} type={cameraType}> <View style={{ flex: 1, backgroundColor: 'transparent', flexDirection: 'row', alignItems: 'flex-end', padding: 20, }}> <Button title="切换镜头" onPress={() => { setCameraType(cameraType === CameraType.back ? CameraType.front : CameraType.back); }} /> </View> </Camera> </View> ); }
- 用旧的
- 升级expo-camera版本:执行命令升级到15.x及以上版本(建议匹配你的Expo SDK版本,比如Expo SDK 49对应expo-camera@15.x,SDK 50对应expo-camera@16.x):
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

