ts多个type合并, 属性不唯一合并冲突问题
问题描述
type复用时, 需要合并多个type, 合并时一个属性好几个type中有用到, 导致属性不唯一且类型也不相同, 使用&符号合并出来的属性类型为never,
//错误示例: 有冲突的合并
type type1 = {num: number
}
type type2 = {num: stringbool: string,str: string
}
type type3 = {num: boolean,bool: boolean,str: string
}
type GetMerge = type1&type2&type3 //合并结果是never; 内部bool与num合并冲突
//正常合并示例: 无冲突的合并
type type2 = {num:string
}
type type3 = {bool: boolean,str: string
}
type GetMerge = type2&type3
//合并结果为
// {// num:number,
// bool:boolean,
// str:string
// }
//目标结果, 无冲突正常合并, 有冲突则冲突属性变为联合类型,并且合并的类型个数动态, 即:合三个, 两个都可以 结果如下
type type1 = {num: number
}
type type2 = {num:string
}
type type3 = {num: boolean,bool: boolean,str: string
}
//合并结果为
// {// num:string|number|boolean,
// bool:boolean,
// str:string
// }
解决方案:
使用infer递归, 和数组实现不限个数, 冲突动态合并的效果, 代码实例如下
type type1 = {num: number
}
type type2 = {num:string
}
type type3 = {num: boolean,bool: boolean,str: string
}//下面为实现部分//读取key值
type KeyofType<T> = keyof T
//读取值, P为keyof出来的key值
type GetType<T,P> = P extends KeyofType<T> ? T[P]:never
//结果类似 keyof type1 | keyof type2 | keyof type3
type MergeKeyType<T extends Array<any>> = T extends [infer X,...infer Rect]? KeyofType<X>|MergeKeyType<Rect>:never
//结果类似(P extends keyof type1 ? type1[P]:never)|(P extends keyof type2 ? type2[P]:never), 例:P等于num,则结果为number|string|boolean
type MergeValueType<T extends Array<any>,P> = T extends [infer X,...infer Rect]? GetType<X,P>|MergeValueType<Rect,P>:never
//合并整个值
type GetMerge<T extends Array<any>> = {[P in MergeKeyType<T>]:MergeValueType<T,P>
}type ff = GetMerge<[type1,type2,type3]> //调用合并, 数组内部合并对象可以动态个数例如[type1,type2]
// 合并结果为
// {// num:string|number|boolean,
// bool:string|boolean,
// str:string
// }const cc:ff = { //实例bool: true,str: "23232",num: 123
}
ts多个type合并, 属性不唯一合并冲突问题相关推荐
- input[type=file]属性
title: input[type=file]属性 date: 2017年8月11日 21:04:48 tags: html categories: 教程 author: "JiaWei&q ...
- arcgis 属性表 汇总_ArcGIS实践教程(19)ArcGIS/ArcMap中属性表的合并方法
merge: 功能一:可以联合 一般的属性表,合并属性或者说挂接属性! 例如:县polygon,只有name属性,现在需要添加他的邮编.区号.人口.面积.代码等等信息,现在搜集到了这些信息,并且放到一 ...
- js 加总数组中某一列_js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理...
js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理 Example: 根据code合并数组,并将sl值累加,如下两种方法: let data = [{ code: 1001, name: ...
- 利用CSS边框合并属性打造table细边框
CSS代码: <style> table{border-collapse: collapse;/* 边框合并属性 */width:200px; } th{border: 1px solid ...
- argument type mismatch 属性参数不匹配
argument type mismatch 属性参数不匹配 mapper映射文件中javaType里面的类型要和实体类一样,
- 【干货】html表格的跨行合并与跨列合并
在HTML中经常会用到表格,但由于我们想要的表格总是需要不规则的.而表格的合并常常会经常用到,今天我们来看一下表格的合并. 首先我们要了解一下合并的步骤 先确认是跨行合并还是跨列合并 根据单元格先上后 ...
- php 合并数组对象,JS内数组合并方法与对象合并实现步骤详解
这次给大家带来JS内数组合并方法与对象合并实现步骤详解,JS内数组合并方法与对象合并实现的注意事项有哪些,下面就是实战案例,一起来看一下. 1 数组合并 1.1 concat 方法var a=[1,2 ...
- mysql 分区合并_mysql中的合并表和分区表详解(经常使用的概念)
分区表是mysql5.1之后的新特性,合并表已经存在很长时间了.这篇文章主要介绍这两个概念以及他们基本的操作. 一.合并表 合并表说实话是一种将要被淘汰的技术,但是掌握了合并表的概念再去看分区表就比较 ...
- 栅栏布局合并html,arcgis栅格数据合并 arcgis栅格图像拼接步骤
arcgis中怎么把两个栅格图像合并在一起 栅格数据合并: 打开 数据管理工具 打开 栅格 打开 栅格数据集 双击 镶嵌至新栅格 栅格剪切可以用裁剪: 1.数据管理工具 2.栅格 3.栅格处理 4.裁 ...
最新文章
- springmvc常用注解标签详解
- H3CTE京东翰林讲师分享实验2 网络设备基本调试
- 15款提高表格操作的jQuery插件
- 曾经一手好牌,但如今却被网友怼或已堕落
- 【janio】janio ClassBodyEvaluator 的使用
- loadrunner录制脚本参数化之间的关联设置
- 在线浏览 Stata 15 PDF 全套电子手册
- 计算机专业的文献综述题目,计算机专业文献综述格式及要求
- 鼎信诺虚拟服务器导数,鼎信诺审计软件常见问题
- 33个职场进阶资源网站汇总
- 浙江理工大学本科毕业答辩beamer模板
- Unity导出视频/截图
- hdoj-2036题解-向量积法求任意多边形面积
- HBase查询一张表的数据条数的方法
- 2019-01-25T01:30:00.000+0000 java取出的问题
- 文昌计算机培训班,文昌云计算培训,文昌计算机培训价格,文昌计算机培训前十名有哪些 - IT教育频道...
- 方言APP系统开发详情
- Python操作AST解JS混淆
- Qt编写物联网管理平台20-控制器管理
- HTTP -> 请求头
热门文章
- Ubuntu 18.04/20.04 安装Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter 驱动
- 【笔记】shell编程——尚硅谷大数据技术之Shell
- 关于网页中的flash在某些电脑上不能完全显示
- 百度文库免费复制word文档的纯文字
- 终于,Python 也可以写前端了
- windows常见adb调试错误
- 70 个可能会用到的正则表达式
- 四维轻云地理空间数据在线管理平台这些新功能已上线,欢迎试用!
- 【实用工具指南 二】视频剪辑工具
- 2021-12-09 使用kali生成木马,渗透Windows系统