Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 打字稿2.4.2“;或;类型奇怪的行为_Typescript - Fatal编程技术网

Typescript 打字稿2.4.2“;或;类型奇怪的行为

Typescript 打字稿2.4.2“;或;类型奇怪的行为,typescript,Typescript,我在“或”类型中发现了奇怪的行为。不知道,如果它是一个错误或功能。。。 我想要实现的是:我的变量应该只允许属性为“data”的对象或属性为“records”的对象。但不是同时具有“数据”和“属性”的对象。 因此: 在我看来,a的作业应该会出错。任何想法,我如何在ts中进行这样的检查?联合类型当前仅包含在内,也就是说,如果任何条件为真,则它是匹配的 目前无法创建独占联合 如果这是您强烈希望的功能,您可能会希望加入一个开放的讨论添加独家联盟 建议:允许在类型#14094之间使用逻辑or(^)运算符进

我在“或”类型中发现了奇怪的行为。不知道,如果它是一个错误或功能。。。 我想要实现的是:我的变量应该只允许属性为“data”的对象或属性为“records”的对象。但不是同时具有“数据”和“属性”的对象。 因此:


在我看来,a的作业应该会出错。任何想法,我如何在ts中进行这样的检查?

联合类型当前仅包含在内,也就是说,如果任何条件为真,则它是匹配的

目前无法创建独占联合

如果这是您强烈希望的功能,您可能会希望加入一个开放的讨论添加独家联盟

建议:允许在类型#14094之间使用逻辑or(^)运算符进行排他联合


通常,
|
表示
^
表示异或。其中
是包含的,而
异或
是独占的。你自己说它是一个
,所以我有点困惑,为什么你会认为这里会使用
XOR
?我可以看到拥有排他性工会的效用,但我认为包容性工会更有用。想想所有现有的JavaScript库,它们都有可以接受字符串或元素的函数。希望您对我链接的github问题的支持将有助于向他们展示对该功能的兴趣。
type X = {
  data: string
};
type Y = {
  records: {
    [recordId: number]: {
      [attributeName: string]: any,
    }
  },
};

type XorY = X | Y;


let a:XorY = {
  data: 'something',
  records: {
    12: {
      someKey: 'someValue',
    }
  }
};