antd
Version:
An enterprise-class UI design language and React components implementation
33 lines (32 loc) • 1.19 kB
TypeScript
type RemoveString<T> = T extends string ? never : T;
export type RemoveClassNamesString<T> = {
[K in keyof T]: string | Record<string, any> extends T[K] ? RemoveString<T[K]> : T[K];
};
export type DeepClassNameType<T> = {
[K in keyof T]?: string extends T[K] ? string | DeepClassNameType<T[K]> : DeepClassNameType<T[K]>;
};
type CSS = React.CSSProperties;
export type DeepStylesType<T> = {
[K in keyof T]?: CSS extends T[K] ? CSS : DeepStylesType<T[K]>;
};
export type GenerateSemantic<T extends {
classNames?: any;
styles?: any;
}, Props> = {
classNames: DeepClassNameType<T['classNames']>;
classNamesNoString: RemoveClassNamesString<DeepClassNameType<T['classNames']>>;
classNamesFn: (info: {
props: Props;
}) => DeepClassNameType<T['classNames']>;
classNamesAndFn: DeepClassNameType<T['classNames']> | ((info: {
props: Props;
}) => DeepClassNameType<T['classNames']>);
styles: DeepStylesType<T['styles']>;
stylesFn: (info: {
props: Props;
}) => DeepStylesType<T['styles']>;
stylesAndFn: DeepStylesType<T['styles']> | ((info: {
props: Props;
}) => DeepStylesType<T['styles']>);
};
export {};