TypeScript类型错误求助:MutableRefObject与Driver类型不匹配问题
TypeScript类型错误排查:MutableRefObject与Driver类型不匹配
问题重现
定义Driver和DriverState接口后,使用useRef创建Driver | null类型的引用,赋值给driverState的driver属性时触发类型错误,错误信息翻译如下:
类型'MutableRefObject<Driver | null>'缺少类型'Driver'中的以下属性:show、hide、toggle、shown以及另外2个属性。ts(2740) Driver.ts(7, 3):预期类型来自属性'driver',该属性在类型'DriverState'上声明(属性)DriverState.driver: Driver | null
错误原因
创建driverState时误用了对象字面量的简写语法:
// 错误写法:driver.current被当作属性名,未赋值给driver属性 const driverState : DriverState = { bottom, driver.current, setDriver, setTranslateY }
这段代码实际生成了一个名为"driver.current"的属性,而非将driver.current的值赋值给driver属性。此时driverState的driver属性未被正确初始化,TypeScript将其推断为Ref对象本身的类型,自然不符合Driver | null的要求。
修复方案
明确指定driver属性的值为driver.current,不要依赖简写:
const driverState : DriverState = { bottom, driver: driver.current, setDriver, setTranslateY }
额外优化建议
- 替换
DriverState里的any类型,提升类型安全性:// 修改DriverState中的setDriver和setTranslateY类型 setDriver: (newDriver: Driver) => void setTranslateY: (newTranslateY: Animated.Value) => void - 优化
setTranslateY函数的参数类型,避免不必要的Ref嵌套:const setTranslateY = (newTranslateY: Animated.Value) => { translateY.current = newTranslateY }
内容的提问来源于stack exchange,提问作者famfamfam
相关产品推荐
相关产品推荐

