我看到您可以在TS中做这样的互斥属性
type A =
| { a: "common"; m: any; n: undefined }
| { a: "common"; m: undefined; n: any };
但是我如何创建一个至少有1个但没有两个的类型。而且不用太冗长...
type A = {a: "common"} & ({m: any} | {n: any});
这样做吗?有更好的方法吗?
答案 0 :(得分:1)
type Combine<A, B> = A | B | A & B
type A = { a: "common" } & Combine<{ m: any }, { n: any }>
答案 1 :(得分:1)
您可以创建一个通用类型,以要求至少一个这样的属性:
type AtLeastOne<T, U extends keyof T = keyof T> = {
[K in U]-?: Required<Pick<T, K>> & Partial<Omit<T, K>>
}[U]
,然后像这样定义您的A
类型
type A = { a: "common" } & AtLeastOne<{
m: any;
n: any;
}>;
但这可能对您来说太冗长了:)
答案 2 :(得分:0)
这不会这样做,因为例如 Month Year Product Name Total
0 1 2018 Creatine 21000
1 1 2018 Glucosamine 37000
2 11 2017 Creatine 41000
3 11 2017 Glucosamine 40000
4 12 2017 Creatine 17000
5 12 2017 Glucosamine 31500
Month Year Quantity Sold Product Name
1 11 2017 10 "Gummies 1 bag"
11 1 2018 10 "Gummies 1 bag"
可分配给您的第二个A,而不是第一个,因此它们不是同一类型。
Does Typescript support mutually exclusive types?被接受的答案定义了XOR类型,我想如果愿意的话,也许用'undefined'代替Without类型中的'never'
{ a: "common", m: 1, n: 2 }
您有想要的东西
编辑-哦,我误读了你的问题。