结合使用时键入并集和交集
Type union and intersection when used in conjunction
我最近开始学习 TypeScript,对类型 intersection/union 概念有点困惑。在下面的代码片段中,我假设编译器应该警告有关缺少参数 z
的错误,但它不会。
interface DataA { x: string, y: string, z: string }
interface DataB { x: string }
interface A { id: string, data: DataA }
interface B { id: string, data: DataB }
type C = A & B
type D = B
type X = C | D
function bar(val: X) {}
bar({
id: "some id",
data: {
x: "some data",
y: "some data"
}
});
type X = C | D = (A & B) | B
并且由于 A & B
是 B
的更严格版本,因此类型 X
的最低要求是 B
,您的分配数据满足 B
的所有必填字段,与 B
相比,甚至还有 y
的附加字段,因此它可以分配给 X
我最近开始学习 TypeScript,对类型 intersection/union 概念有点困惑。在下面的代码片段中,我假设编译器应该警告有关缺少参数 z
的错误,但它不会。
interface DataA { x: string, y: string, z: string }
interface DataB { x: string }
interface A { id: string, data: DataA }
interface B { id: string, data: DataB }
type C = A & B
type D = B
type X = C | D
function bar(val: X) {}
bar({
id: "some id",
data: {
x: "some data",
y: "some data"
}
});
type X = C | D = (A & B) | B
并且由于 A & B
是 B
的更严格版本,因此类型 X
的最低要求是 B
,您的分配数据满足 B
的所有必填字段,与 B
相比,甚至还有 y
的附加字段,因此它可以分配给 X