UNPKG

@react-native-ohos/react-native-unistyles

Version:
28 lines (23 loc) 863 B
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