Skip to content

Commit

Permalink
Merge pull request #145 from jpudysz/feature/variants
Browse files Browse the repository at this point in the history
feat: narrow down boolean variants
  • Loading branch information
jpudysz authored Feb 7, 2024
2 parents 6fb66b5 + 543e696 commit ea0f156
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/types/variants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,16 @@ type ExtractVariantKeys<T> = T extends object
? ExtractVariant<T[keyof T]>
: never

type HasTrue<T> = 'true' extends keyof T ? true : false
type HasFalse<T> = 'false' extends keyof T ? true : false
type HasBooleanVariants<T> = T extends Record<'true', any>
? true
: T extends Record<'false', any>
? true
: false

type ExtractSubVariantKeys<T> = T extends object
? [HasTrue<T>, HasFalse<T>] extends [true, true]
? HasBooleanVariants<T> extends true
? keyof Omit<T, 'default'> | boolean | undefined
: [HasTrue<T>] extends [true]
? keyof Omit<T, 'default'> | true | undefined
: [HasFalse<T>] extends [true]
? keyof Omit<T, 'default'> | false | undefined
: keyof Omit<T, 'default'>
: keyof Omit<T, 'default'> | undefined
: never

type ExtractVariant<T> = T extends (...args: any) => infer R
Expand Down

0 comments on commit ea0f156

Please sign in to comment.