问题描述

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合并, 属性不唯一合并冲突问题相关推荐

  1. input[type=file]属性

    title: input[type=file]属性 date: 2017年8月11日 21:04:48 tags: html categories: 教程 author: "JiaWei&q ...

  2. arcgis 属性表 汇总_ArcGIS实践教程(19)ArcGIS/ArcMap中属性表的合并方法

    merge: 功能一:可以联合 一般的属性表,合并属性或者说挂接属性! 例如:县polygon,只有name属性,现在需要添加他的邮编.区号.人口.面积.代码等等信息,现在搜集到了这些信息,并且放到一 ...

  3. js 加总数组中某一列_js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理...

    js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理 Example: 根据code合并数组,并将sl值累加,如下两种方法: let data = [{ code: 1001, name: ...

  4. 利用CSS边框合并属性打造table细边框

    CSS代码: <style> table{border-collapse: collapse;/* 边框合并属性 */width:200px; } th{border: 1px solid ...

  5. argument type mismatch 属性参数不匹配

    argument type mismatch 属性参数不匹配 mapper映射文件中javaType里面的类型要和实体类一样,

  6. 【干货】html表格的跨行合并与跨列合并

    在HTML中经常会用到表格,但由于我们想要的表格总是需要不规则的.而表格的合并常常会经常用到,今天我们来看一下表格的合并. 首先我们要了解一下合并的步骤 先确认是跨行合并还是跨列合并 根据单元格先上后 ...

  7. php 合并数组对象,JS内数组合并方法与对象合并实现步骤详解

    这次给大家带来JS内数组合并方法与对象合并实现步骤详解,JS内数组合并方法与对象合并实现的注意事项有哪些,下面就是实战案例,一起来看一下. 1 数组合并 1.1 concat 方法var a=[1,2 ...

  8. mysql 分区合并_mysql中的合并表和分区表详解(经常使用的概念)

    分区表是mysql5.1之后的新特性,合并表已经存在很长时间了.这篇文章主要介绍这两个概念以及他们基本的操作. 一.合并表 合并表说实话是一种将要被淘汰的技术,但是掌握了合并表的概念再去看分区表就比较 ...

  9. 栅栏布局合并html,arcgis栅格数据合并 arcgis栅格图像拼接步骤

    arcgis中怎么把两个栅格图像合并在一起 栅格数据合并: 打开 数据管理工具 打开 栅格 打开 栅格数据集 双击 镶嵌至新栅格 栅格剪切可以用裁剪: 1.数据管理工具 2.栅格 3.栅格处理 4.裁 ...

最新文章

  1. springmvc常用注解标签详解
  2. H3CTE京东翰林讲师分享实验2 网络设备基本调试
  3. 15款提高表格操作的jQuery插件
  4. 曾经一手好牌,但如今却被网友怼或已堕落
  5. 【janio】janio ClassBodyEvaluator 的使用
  6. loadrunner录制脚本参数化之间的关联设置
  7. 在线浏览 Stata 15 PDF 全套电子手册
  8. 计算机专业的文献综述题目,计算机专业文献综述格式及要求
  9. 鼎信诺虚拟服务器导数,鼎信诺审计软件常见问题
  10. 33个职场进阶资源网站汇总
  11. 浙江理工大学本科毕业答辩beamer模板
  12. Unity导出视频/截图
  13. hdoj-2036题解-向量积法求任意多边形面积
  14. HBase查询一张表的数据条数的方法
  15. 2019-01-25T01:30:00.000+0000 java取出的问题
  16. 文昌计算机培训班,文昌云计算培训,文昌计算机培训价格,文昌计算机培训前十名有哪些 - IT教育频道...
  17. 方言APP系统开发详情
  18. Python操作AST解JS混淆
  19. Qt编写物联网管理平台20-控制器管理
  20. HTTP -> 请求头

热门文章

  1. Ubuntu 18.04/20.04 安装Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter 驱动
  2. 【笔记】shell编程——尚硅谷大数据技术之Shell
  3. 关于网页中的flash在某些电脑上不能完全显示
  4. 百度文库免费复制word文档的纯文字
  5. 终于,Python 也可以写前端了
  6. windows常见adb调试错误
  7. 70 个可能会用到的正则表达式
  8. 四维轻云地理空间数据在线管理平台这些新功能已上线,欢迎试用!
  9. 【实用工具指南 二】视频剪辑工具
  10. 2021-12-09 使用kali生成木马,渗透Windows系统