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

React Native TS报错:any类型无法索引MutableRefObject<never[]>

报错根因

报错由三个问题共同触发,仅修改items相关代码无法解决:

  • 调用useRef([])时未指定泛型类型,TypeScript会自动将ref的类型推导为MutableRefObject<never[]>,即该数组永远应为空,不允许写入任何类型的值
  • 代码中直接使用any类型的数组成员i作为索引操作ref对象,TS不允许any类型值索引类型约束严格的never数组
  • 漏写了ref的访问规则:useRef返回的ref对象,内部存储的值必须通过.current属性访问,直接给refs对象本身赋值本身就是错误用法
修复代码
import { useRef } from 'react';
// React Native场景下将HTMLDivElement替换为对应组件类型(如View),并从react-native导入对应组件
const Comp = (props: { items: (string | number)[] }) => {
  // 给useRef指定明确泛型,声明存储的是DOM/组件实例数组,初始值传空数组
  const refs = useRef<(HTMLDivElement | null)[]>([]);

  return (
    <>
      {props.items.map((item, index) => (
        <div 
          key={item} 
          // 通过.current访问ref存储的数组,用map返回的index做索引更稳妥
          ref={(el) => (refs.current[index] = el)}
        >
          {item}
        </div>
      ))}
    </>
  );
};
关键修改说明
  • 显式声明useRef的泛型类型,替换TS默认推导的never[]类型,允许数组存储指定类型的元素实例
  • 所有对ref内部值的读写都必须通过.current属性完成,直接操作ref对象本身不符合React ref的使用规则
  • 优先使用map方法返回的数组下标index作为ref数组的索引,避免当item为对象、布尔值等非合法数组索引时出现的隐式转换、ref覆盖问题
  • 避免将入参items声明为any[],明确item的具体类型可以从根源减少大部分隐式any类型报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:46:00