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