ts:交集类型 交叉类型

除联合类型的交集是取共同的部分外,其他类型的交集是取所有

c 复制代码
  type TypeA = { a: string; b: number; };  
  type TypeB = { b: number; c: boolean; };  
  type IntersectionType = TypeA & TypeB; // { a: string; b: number; c: boolean; }
  
  type test2 = ('1' | '2') & ('1' | '3')

如果编辑器没有简化交叉类型可以自己处理下

c 复制代码
interface User {
    name: string
    age: number
    address: string
  }
  
  type UserPartialName = PartialByKeys<User, 'name'>
  type PartialByKeys<T, K> = {
    [P in keyof T as P extends K ? P : never]?: T[P]
  } & {
    [P in Exclude<keyof T, K>]: T[P]
  }
	此时UserPartialName 显示
	// type UserPartialName = {
	//   name?: string | undefined;
	// } & {
	//   age: number;
	//   address: string;
	// } 

可以人为处理下

c 复制代码
type IntersectionToObj<T> = {
    [K in keyof T]: T[K]
  }
  type PartialByKeys<T , K = any> = IntersectionToObj<{
    [P in keyof T as P extends K ? P : never]?: T[P]
  } & {
    [P in Exclude<keyof T, K>]: T[P]
  }>
相关推荐
雨夜的星光3 分钟前
Python JSON处理:load/loads/dump/dumps全解析
开发语言·python·json
fen_fen1 小时前
Java打包时,不将本地Jar打包到项目的最终 JAR 中
开发语言·python·pycharm
灵感__idea2 小时前
Hello 算法:让前端人真正理解算法
前端·javascript·算法
向葭奔赴♡3 小时前
CSS是什么?—— 网页的“化妆师”
前端·css
黑犬mo3 小时前
在Edge、Chrome浏览器上安装uBlock Origin插件
前端·edge
excel3 小时前
🧩 Vue 3 watch 源码详解(含完整注释)
前端·javascript·vue.js
大前端helloworld3 小时前
前端梳理体系从常问问题去完善-网络篇
前端·面试
excel3 小时前
🌿 一文看懂 Vue 3 的 watch 源码:从原理到流程
前端
wjs20243 小时前
SQL AND & OR 操作符详解
开发语言
~光~~3 小时前
【环境配置 】WSL2 +ubuntu20.04 +Qt配置+Kits配置
开发语言·qt·ubuntu