typescript 2.4.2“或”类型奇怪的行为

时间:2017-07-26 14:08:31

标签: typescript

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

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',
    }
  }
};

在我看来,对a的赋值应该抛出一个错误。任何想法,我怎么能做这样的检查?

1 个答案:

答案 0 :(得分:3)

联盟类型目前仅包含在内,也就是说,如果任何条件为真,那么它就是匹配。

目前无法创建独家联盟。

有一个开放的issue讨论添加您可能想要参与的独家联盟,如果这是您强烈需要的功能。

  

提案:允许在类型#14094

之间使用逻辑或(^)运算符的独占联合