react-native-unistyles
Version:
Level up your React Native StyleSheet
15 lines • 829 B
TypeScript
export type ExtractVariantNames<T> = T extends (...args: any) => infer R ? ExtractVariantKeys<R> : ExtractVariantKeys<T>;
type ExtractVariantKeys<T> = T extends object ? ExtractVariant<T[keyof T]> : never;
type HasBooleanVariants<T> = T extends Record<'true', any> ? true : T extends Record<'false', any> ? true : false;
type ExtractSubVariantKeys<T> = T extends object ? HasBooleanVariants<T> extends true ? keyof Omit<T, 'default'> | boolean | undefined : keyof Omit<T, 'default'> | undefined : never;
type ExtractVariant<T> = T extends (...args: any) => infer R ? R extends {
variants: infer V;
} ? {
[key in keyof V]?: ExtractSubVariantKeys<V[key]>;
} : never : T extends {
variants: infer V;
} ? {
[key in keyof V]?: ExtractSubVariantKeys<V[key]>;
} : never;
export {};
//# sourceMappingURL=variants.d.ts.map