【TypeScript】中关于 { 声明合并 } 的使用及注意事项
在TypeScript中,对象类型的声明可以通过交叉类型(&)或者合并类型(|)进行合并。但是,交叉类型更常用于合并多个类型的共有属性,而合并类型通常用于表示一个类型是多种类型中的任意一个。
交叉类型(&)用于合并多个类型的共有属性:
type A = { name: string; }
type B = { age: number; }
type C = A & B; // 结果类型为 { name: string; age: number; }
合并类型(|)用于表示一个类型可能是多种类型中的一个:
type A = { name: string; }
type B = { age: number; }
type C = A | B; // 结果类型为 { name: string; } | { age: number; }
注意事项:
- 使用交叉类型时,如果有重复属性,它们会被合并为共同的属性,这可能导致属性类型的混合。
- 使用合并类型时,如果有重复的类型,它们会被展开成两个独立的子类型。
- 在使用合并类型时,如果想要确保某个属性在所有类型中都存在,可以使用分布式属性来精确控制。
例如,使用分布式属性来确保name
属性在所有类型中都存在:
type A = { name: string; }
type B = { age: number; }
type NameExtracted = A & { [P in keyof B]: never };
type C = NameExtracted | B; // 结果类型为 { name: string; age: number; }
评论已关闭