Files
.github
.storybook
scripts
src
account
bin
lib
login
tools
AndByDiscriminatingKey.ts
Array.prototype.every.ts
DeepPartial.ts
HTMLElement.prototype.prepend.ts
LazyOrNot.ts
Markdown.ts
assert.ts
clsx.ts
deepAssign.ts
deepClone.ts
emailRegExp.ts
formatNumber.ts
memoize.ts
pathBasename.ts
useConst.ts
useConstCallback.ts
useInsertLinkTags.ts
useInsertScriptTags.ts
useSetClassName.ts
vite-plugin
PUBLIC_URL.ts
index.ts
tsconfig.json
stories
test
.all-contributorsrc
.gitattributes
.gitignore
.prettierignore
.prettierrc.json
CONTRIBUTING.md
LICENSE
README.md
package.json
renovate.json
tsproject.json
vitest.config.ts
yarn.lock
keycloak_theme/src/tools/AndByDiscriminatingKey.ts

26 lines
1002 B
TypeScript
Raw Normal View History

export type AndByDiscriminatingKey<
DiscriminatingKey extends string,
U1 extends Record<DiscriminatingKey, string>,
U2 extends Record<DiscriminatingKey, string>
> = AndByDiscriminatingKey.Tf1<DiscriminatingKey, U1, U1, U2>;
export declare namespace AndByDiscriminatingKey {
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>
: U1Again[DiscriminatingKey] & U2[DiscriminatingKey] extends never
? U1 | U2
: U1;
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;
}