最近在搬砖的时候,遇到一个场景,需要根据已存在的联合类型,将其转为交叉类型: typePreson={name:string}|{age:number}|{needMoney:boolean}typeResult=Uinon2Intersection<Preson> 期望通过Uinon2Intersection转换后,得到的Result: typeResult={name:string}&{age:number}&{needMoney:boolean} 刚开始感觉很简单。
1.1 交叉类型 交叉类型就是通过**&**符号,将多个类型合并为一个类型。 interface T1{ name: string } interface T2{ age: number } type T3 = T2 & t1 const a:T3 { name: 'xm', age: 20 } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 1.2 联合类型 联合类型就是通过**|...
// Q: 实现 UnionToIntersection<T>,// 使 { a: string } | { b: number } | { c: boolean } ,// 转变成 { a: string } & { b: number } & { c: boolean }// A:typeUnionToIntersection<U>=(Uextendsany?(x:U)=>void:never)extends((x:inferI)=>void)?I:nevertypeI=UnionToInter...
1、联合类型与类型收缩的结合使用 2、交叉运算符特性、与交叉运算 3、工具类型.PartialByKeys的实现 4、泛型变量TKVE与显式、隐式指定 一、联合类型与类型收缩的结合使用 // 联合类型 和类型收缩 function greet(person: string | string[]): string | string[] { if (typeof person === 'string') { re...
联合类型 | 表示一个值可以是多种类型中的一种,用于处理不确定类型的值,需要在访问时进行类型检查。 交叉类型 & 表示一个值同时满足多个类型的要求,用于合并多个类型的特性到一个单一的类型中。 这些类型工具在 TypeScript 中非常有用,它们可以帮助开发者编写更精确、更安全的类型代码。通过合理使用这些类型特性,可...
1、联合类型:联合类型(Union Types)可以通过管道 ( | ) 将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错。 创建联合类型的语法格式如下:Type1|Type2|Type3 比如:可以用 | 来支持多种类型 let x: number |null |undefined; ...
类型“number”上不存在属性“length”。 length 不存在于 number,所以编译不通过。可以看出这跟交叉类型不一样,交叉类型是可以访问所有成员的属性。 总结 交叉类型是多个类型合并为一个类型,可以访问所有类型的属性;联合类型是多个类型中的某一个,只能访问所有类型的共有属性。
很显然,如果我们仅仅把原始类型、字面量类型、函数类型等原子类型合并成交叉类型,是没有任何用处的,因为任何类型都不能满足同时属于多种原子类型,比如既是 string 类型又是 number 类型。因此,在上述的代码中,类型别名 Useless 的类型就是个 never。1.合并接口类型 联合类型真正的用武之地就是将多个接口类型...
TypeScript的基础类型、字面量类型、函数类型及接口类型,它们都是单一、原子的类型元素。其实,有一些稍微复杂、实际编程场景,我们还需要通过组合/结合单一、原子类型构造更复杂的类型,以此描述更复杂的数据和结构。这就是使用联合和交叉类型(Unions and Intersection Types)。