Typescript 类型脚本-对象或

Typescript 类型脚本-对象或,typescript,Typescript,我想有一种类型,上面写着: 如果存在属性容器,也应包括属性a。如果存在项属性,也应包括属性b容器和项目不能同时存在 我假设的代码如下所示,但它似乎并没有做到上面所说的 type A = { container: true; a: string } | { item: true; b: number }; 我如何构建这样的类型 null | string似乎意味着null或string,但SomeObject |另一个object似乎意味着某个对象和另一个对象中存在的所有属性这似乎有点老套,但

我想有一种类型,上面写着:

如果存在属性
容器
,也应包括属性
a
。如果存在
属性,也应包括属性
b
<代码>容器和
项目
不能同时存在

我假设的代码如下所示,但它似乎并没有做到上面所说的

type A = { container: true; a: string } | { item: true; b: number };
我如何构建这样的类型



null | string
似乎意味着
null或string
,但
SomeObject |另一个object
似乎意味着
某个对象和另一个对象中存在的所有属性

这似乎有点老套,但基本上创建了一个异或。因此,如果将
item
b
添加到变量
myVar
,则会出现一个typescript错误

type ExampleType =
  | { container: true; a: string; item?: never; b?: never }
  | { item: true; b: number; container?: never; a?: never }

// Adding item or b to the below type, will cause a ts error
const myVar: ExampleType = { container: true, a: 'z' }

因此,如果提供了容器密钥,它将期望a的键值出现,如果传递了项或b,则会出错。

这是否回答了您的问题?^这只是答案的一部分-首先,您需要定义一个类似XOR的类型,它要么有
容器
要么有
,但不是两者都有,也不是没有。然后,添加一个条件类型,根据存在的属性,该条件类型将结果类型与
{a:string}
{b:number}
相交。您也可以使用判别联合,但此定义缺少判别属性