TypeScript联合类型与索引签名冲突 表格分页请求类型定义问题
问题原因
你的报错根源是交叉类型的索引签名冲突:Filters 类型定义的任意字符串索引要求值必须为 React.Key[] 类型,而你将它和 Sort、Pagination 做交叉后,order_by、sort_order、page、page_size 这几个固定属性的类型都是非数组类型,和索引签名的要求冲突。
解决方案
使用 TypeScript 4.1 及以上支持的键重映射特性,在定义 Filters 索引签名时自动排除 Sort 和 Pagination 的固定键,不需要手动枚举要排除的键:
// 提取所有固定请求参数的键 type FixedRequestKeys = keyof Sort<unknown> | keyof Pagination // 重写Filters类型,排除固定键的索引校验 interface Filters { [key: string as Exclude<key, FixedRequestKeys>]: React.Key[]; } // 原有Request类型不需要改动 type Request<T> = Sort<T> & Pagination & Filters;
修改后你原来的实例合并代码即可正常通过类型校验,后续如果 Sort 或 Pagination 新增属性,也会自动被排除在 Filters 的索引校验规则外,不需要手动修改配置。
内容的提问来源于stack exchange,提问作者Sergei Klinov
相关产品推荐
相关产品推荐

