(TypeScript 5.4.5)
这很容易理解
interface A {
key: string;
value: string;
}
interface B {
key: string;
value: number;
}
type C = A & B // => { key: string; value: never; }
// ^_^ string & string = string
// string & number = never
但是当我将
number
更改为 boolean
...
interface A {
key: string;
value: string;
}
interface B {
key: string;
value: boolean;
}
type C = A & B // => never
// ??? Why not { key: string; value: never; }
我认为这个行为在这个Github拉取请求(突出显示我的)中进行了描述:
交叉点
相当于T1 & T2 & ... & Tn
当never
- 两个或多个 Tx 类型具有 具有相同名称的属性,并且
- 在至少一组同名属性中,某些属性具有文字类型并且没有属性具有类型
,并且never
- 该组中属性类型的交集是
。never
当你考虑到 TypeScript 实际上认为
boolean
是 true | false
的文字并时,你的第二个示例满足所有这些条件。