实现 classNames

该文章定义了两个接口ClassArray和ClassDictionary,以及一个类型ClassValue,用于处理不同类型的类名值。然后,它导出一个名为classNames的函数,该函数接受ClassValue类型的参数,将这些参数转化为字符串并合并成一个CSS类名字符串。函数内部逻辑包括检查参数类型,处理字符串、数字、数组和对象等不同情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

interface ClassArray extends Array<ClassValue> {}

interface ClassDictionary {
    [id: string]: any;
}
type ClassValue =  string | number | ClassDictionary | ClassArray | undefined | null | boolean;

export default function classNames(...args: ClassValue[]): string {
	const classes: ClassValue[] = [];
	const { length } = args;
	
	for ( let index = 0; index < length ; index++ ){
		const arg: ClassValue = args[index];
		if(arg){
			const argType: string = typeof arg;
			if (argType === 'string' || argType === ''number) {
				classes.push(arg);
			}else if (Array.isArray(arg) && arg.length) {
				const inner: string = className.call(null, ...arg);
				if (inner) {
					classes.push(inner);
				}
			}else if (argType === 'object') {
				const inner: string = Object.keys(arg)
				.filter((key)=> arg[key])
				.join(' ');
				if(inner) {
					classes.push(inner);	
				}	
			}
		}
	}
	return classes.join(' ');
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值