2021-06-28 04:04:48 +02:00
|
|
|
export type AndByDiscriminatingKey<
|
2021-10-11 21:35:40 +02:00
|
|
|
DiscriminatingKey extends string,
|
|
|
|
U1 extends Record<DiscriminatingKey, string>,
|
|
|
|
U2 extends Record<DiscriminatingKey, string>,
|
|
|
|
> = AndByDiscriminatingKey.Tf1<DiscriminatingKey, U1, U1, U2>;
|
2021-06-28 04:04:48 +02:00
|
|
|
|
|
|
|
export declare namespace AndByDiscriminatingKey {
|
2021-10-11 21:35:40 +02:00
|
|
|
export type Tf1<
|
|
|
|
DiscriminatingKey extends string,
|
|
|
|
U1,
|
|
|
|
U1Again extends Record<DiscriminatingKey, string>,
|
|
|
|
U2 extends Record<DiscriminatingKey, string>,
|
|
|
|
> = U1 extends Pick<U2, DiscriminatingKey>
|
|
|
|
? Tf2<DiscriminatingKey, U1, U2, U1Again>
|
|
|
|
: U1;
|
2021-06-28 04:04:48 +02:00
|
|
|
|
2021-10-11 21:35:40 +02:00
|
|
|
export type Tf2<
|
|
|
|
DiscriminatingKey extends string,
|
|
|
|
SingletonU1 extends Record<DiscriminatingKey, string>,
|
|
|
|
U2,
|
|
|
|
U1 extends Record<DiscriminatingKey, string>,
|
|
|
|
> = U2 extends Pick<SingletonU1, DiscriminatingKey>
|
|
|
|
? U2 & SingletonU1
|
|
|
|
: U2 extends Pick<U1, DiscriminatingKey>
|
|
|
|
? never
|
|
|
|
: U2;
|
2021-06-28 04:04:48 +02:00
|
|
|
}
|