变量x满足接口A,并且可选地也满足接口B



我有以下声明:

const x : A | (A & B)

我想知道是否有一个";可选的";&操作员,这样我就可以更一致地写

const x : A &? B

以表示x肯定满足A,但有时也可能满足B

实用程序类型

没有A &? B这样的语法,也没有办法定义语法。我们所拥有的是实用程序类型。

你可以为任何东西定义一个实用程序类型,尽管它可能会比只写A | (A & B)更多的字符,这取决于你如何命名它

type WithOptional<Required, Optional> = Required | ( Required & Optional )
const x: WithOptional<A, B> = ...

移动&

如果我们有SomeLongNameSomeOtherLongName而不是AB,那么必须在A | (A & B)中写入两次A类型突然变得更加烦人。A存在于联合的两个成员中,所以我们可以提取它,并说我们总是有A,也有B,或者不添加任何内容。

const x: A & (B | {});
const y: SomeLongName & (SomeOtherLongName | {});

部分

评论中对该类型的潜在用例进行了一些讨论。这类事情的用例通常与析构函数有关,而A | (A & B)不允许析构函数B属性。所以我最后写的是A & Partial<B>。这表示所有A属性都是必需的,所有B属性都是可选的。CCD_ 19属性可以被破坏,但可能是CCD_。

const x: A & Partial<B> = { p1: 0, p2: 0 }
// p1 and p2 are `number`, p3 and p4 are `number | undefined`
const { p1, p2, p3, p4 } = x;

您也可以将此定义用于实用程序类型:

type WithOptional<Required, Optional> = Required & Partial<Optional>

最新更新