企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
>[success] # 交叉类型 ~~~ 1.交叉类型:我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性,取多个类型的并集 简单的说' 交叉类型是将多个类型合并为一个类型',用'&' 来表示 2.下面的案例是将两个对象合并,并且返回合并后的对象 3.仅仅把原始类型、字面量类型、函数类型等原子类型合并成交叉类型,是没有任何用处的,因为任何类型都不能满足同时 属于多种原子类型'比如既是 string 类型又是 number 类型' ~~~ >[danger] ##### 案例 ~~~ const mergFunc = <T,U>(arg1:T,age2:U):U&T=>{ let res = {} as U&T res = Object.assign(arg1,age2) return res } mergFunc({a:1},{b:2}) ~~~ >[danger] ##### 解释第三条 ~~~ type StrAndNum = string & number ~~~ ![](https://img.kancloud.cn/38/19/3819c86e641f63f3b54dd477acbfe99f_447x89.png) >[danger] ##### 常见的用途 ~~~ // 将两个类型合并 type IntersectionType = { id: number; name: string } & { age: number } const mixed: IntersectionType = { id: 1, name: 'name', age: 18, } ~~~ >[danger] ##### 如果合并重名 -- 类型不同 ~~~ 1.合并时候两个都有相同定义,但类型不同就会产生一个'无用类型'即类型为never ~~~ ~~~ type IntersectionType = { id: number; name: string } & { age: number ,id:string} const mixed: IntersectionType = { id: 1, // 报错 name: 'name', age: 18, } ~~~ ![](https://img.kancloud.cn/c0/58/c0581abd0c19918cd240139cf1952006_865x234.png) >[danger] ##### 如果合并重名 -- 类型相同 ~~~ 1.合并时候两个都有相同定义,但类型相同就会,类型就是两者中的子类型 ~~~ * number 和number 子类型还是number 因此没问题 ~~~ type IntersectionType = { id: number; name: string } & { age: number id: number } let mixed: IntersectionType = { id: 1, name: 'name', age: 18, } mixed = { id: 2, name: 'name', age: 18, } ~~~ * number 和 2 子类型因此是 2 所以此时赋值1有问题 ~~~ type IntersectionType = { id: 2; name: string } & { age: number id: number } let mixed: IntersectionType = { id: 1, // 报错 name: 'name', age: 18, } mixed = { id: 2, name: 'name', age: 18, } ~~~ ![](https://img.kancloud.cn/08/c3/08c387821f9428e06c0f79fab522c96b_942x386.png)