我在“或”类型中发现了奇怪的行为。不知道,如果它是一个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的赋值应该抛出一个错误。任何想法,我怎么能做这样的检查?
答案 0 :(得分:3)
联盟类型目前仅包含在内,也就是说,如果任何条件为真,那么它就是匹配。
目前无法创建独家联盟。
有一个开放的issue讨论添加您可能想要参与的独家联盟,如果这是您强烈需要的功能。
提案:允许在类型#14094
之间使用逻辑或(^)运算符的独占联合