mix-cn
Version:
一个用于字符串拼接的小工具,常用于 class name 的拼接
25 lines (24 loc) • 1.01 kB
TypeScript
/**
* 参数的数据类型
*/
export type EnClassNameItem = null | number | string | boolean | undefined | (() => string) | (() => EnClassNameItem[]) | EnClassNameItem[] | Record<string, boolean | undefined>;
/**
* 使用 infer 判断出当前的数据类型
*
* 字符串为具体的字符串值而非 string
*/
export type EnTypeofClassNameItem<T> = T extends null | boolean | undefined ? '' : T extends readonly [unknown, infer U] ? EnTypeofClassNameItem<U> | '' : T extends readonly [unknown, infer U, infer V] ? EnTypeofClassNameItem<U> | EnTypeofClassNameItem<V> : T extends Record<string, boolean | undefined> ? keyof T | '' : T extends () => string ? string : T;
/**
* 递归判断当前返回的数据类型
*/
export type EnXcn<T> = T extends [infer U, ...infer V] ? `${U & string} ${EnXcn<V>}` : '';
/**
*
* 合并 class
*
* merge class name
*
*/
export declare function xcn<T extends EnClassNameItem[]>(...classNameList: T): EnXcn<{
[K in keyof T]: EnTypeofClassNameItem<T[K]>;
}>;