联合类型
typescript
复制代码
interface A {
name: string
age: number
}
interface B {
name: number
id: string
}
type Union = A | B;
const c: Union
当我们使用联合类型赋值的时候,数据结构只能选择满足形如A或者形如B
当我们使用联合类型读取属性的时候,只能获取其共同的属性名 ps(idea 语法提示)。如果访问的是非共同的属性,必须做好类型保护以防止bug。
交叉类型
当我们使用交叉类型读取属性,可以获取所有类型的所有属性名,赋值的时候需要满足所有类型的结构
注意,非常重要,当我们交叉的类型中含有相同属性名但属性类型不一样的情况,该属性会成为never类型
原因也很简单:交叉操作,name不可能同时是number类型又是string类型,所以成为了never类型。
function extend<T, U>(first: T, second: U): T & U {
let result = <T & U>{};
for (let id in first) {
(<any>result)[id] = (<any>first)[id];
}
for (let id in second) {
if (!result.hasOwnProperty(id)) {
(<any>result)[id] = (<any>second)[id];
}
}
return result;
}