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

如何为React SplitButton的options添加data-test-id属性并解决TS报错

SplitButton 选项添加自定义属性解决TS2322报错方案

报错原因

这个错误是因为 SplitButton 组件的 options 入参的 TS 类型定义只允许传入 label 和 value 两个属性,你额外传入的自定义属性不存在于预定义的类型中,触发了TS的对象字面量额外属性检查。

方案1:你自主维护SplitButton组件的情况

  • 第一步:扩展 Options 类型定义
    找到组件内部定义Options类型的位置,要么显式声明允许的自定义属性,要么添加索引签名支持任意自定义属性:
    // 方式1:显式添加需要的自定义属性,类型更安全
    interface SplitButtonOption {
      label: React.ReactNode;
      value: string;
      'data-test-id'?: string; // 建议遵循HTML data-* 规范命名属性
    }
    
    // 方式2:加索引签名,支持传入任意自定义属性
    interface SplitButtonOption {
      label: React.ReactNode;
      value: string;
      [key: string]: any;
    }
    
  • 第二步:组件内部透传自定义属性
    渲染选项DOM的时候,把自定义属性透传到对应的节点上,比如:
    // 渲染选项时取出需要的属性,剩余属性透传给DOM
    {options.map(({label, value, ...restProps}) => (
      <li key={value} {...restProps}>{label}</li>
    ))}
    

方案2:使用第三方组件库的SplitButton的情况

  • 方式1:模块扩充扩展第三方类型
    全局声明文件(比如global.d.ts)中扩充第三方库的Options类型,以antd为例:
    declare module 'antd/es/split-button' {
      interface SplitButtonOption {
        'data-test-id'?: string;
      }
    }
    
  • 方式2:临时类型断言(不推荐,仅临时调试用)
    给options数组加类型断言跳过检查:
    const options = [{
      label: '按钮1',
      value: 'btn1',
      'data-test-id': 'split-btn-1'
    }] as any
    
    也可以在报错行上方加// @ts-ignore单行跳过类型检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:03