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

React组件props.onChange传Event触发never类型错误原因排查

错误原因分析
  • TypeScript无法关联泛型条件类型与组件props的运行时值
    你的OnChangeProps是基于泛型布尔参数的条件类型,但组件中的isForwarded是普通boolean类型(而非字面量true/false),TypeScript没法把这个运行时布尔值和条件类型的泛型参数做绑定。当泛型参数是boolean联合类型时,条件类型会触发分发特性,最终onChange的类型会变成两种回调类型的联合,而它们的参数类型交集为never(比如Event和string/number没有重叠类型),所以调用时无论传什么参数都会提示无法赋值给never。

    举个简化的类型定义示例:

    type OnChangeProps<T, IsForwarded extends boolean> = IsForwarded extends true 
      ? { onChange: (e: Event) => void } 
      : { onChange: (value: T) => void };
    
    // 组件props定义
    type InputProps<T> = { isForwarded: boolean } & OnChangeProps<T, boolean>;
    

    这里OnChangeProps<T, boolean>会被分发为{ onChange: (e: Event) => void } | { onChange: (value: T) => void },此时onChange的参数类型是Event & T,如果T是string或number,这个交集就是never。

  • 手动类型断言无法解决根本问题
    你用event as Event做断言,但TypeScript已经确定当前onChange的参数类型是never,断言只能改变TS对event的认知,无法改变onChange的参数类型要求,所以错误依然存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:07:35