Ant Design Table onChange中selectedRowKeys为何不是数字数组?
问题原因及解决方法
核心原因
Ant Design Table组件的rowSelection配置里,onChange方法的第一个参数selectedRowKeys的类型被定义为Key[],而Key是TypeScript内置的联合类型:string | number | symbol。
你实际打印出数字数组,是因为表格的rowKey用了数字类型的字段,但TypeScript的类型检查是基于类型定义而非运行时实际值的——它会严格遵循组件的类型声明,认为selectedRowKeys可能包含string或symbol类型的值,所以不允许你把参数类型直接写死为number[],这就导致了类型不兼容的报错。
常用解决方式
- 方式一:兼容宽泛类型,内部转换
先把参数类型设为Key[],在函数内部通过类型断言转换成number[](因为你确定实际运行时是数字):const rowSelection = { onChange: (selectedRowKeys: Key[], selectedRows: Mission[]) => { const numSelectedKeys = selectedRowKeys as number[]; console.log(numSelectedKeys); } } - 方式二:通过泛型约束Key类型
给TableRowSelection指定泛型参数,明确Key的类型为number:import { TableRowSelection } from 'antd/es/table/interface'; const rowSelection: TableRowSelection<Mission, number> = { onChange: (selectedRowKeys: number[], selectedRows: Mission[]) => { console.log(selectedRowKeys); } }
内容的提问来源于stack exchange,提问作者kan
相关产品推荐
相关产品推荐

