交集以不同方式对待“数字”和“布尔值”

问题描述 投票:0回答:1

(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; }
typescript
1个回答
0
投票

我认为这个行为在这个Github拉取请求(突出显示我的)中进行了描述:

交叉点

T1 & T2 & ... & Tn
相当于
never

  • 两个或多个 Tx 类型具有 具有相同名称的属性,并且
  • 在至少一组同名属性中,某些属性具有文字类型并且没有属性具有类型
    never
    ,并且
  • 该组中属性类型的交集是
    never

当你考虑到 TypeScript 实际上认为

boolean
true | false
文字并
时,你的第二个示例满足所有这些条件。

© www.soinside.com 2019 - 2024. All rights reserved.