如何遍历给定配置并检查skip是否接受数值类型,不满足则输出错误
遍历配置并检查skip字段是否仅接受数值类型
嘿,这问题我熟,我来给你一步步拆解怎么实现这个需求~
第一步:定位到skip的配置项
你的配置里skip挂在get方法的参数配置下,但如果以后要加post、put这类其他请求方法,用遍历的方式会更通用,不用硬写固定路径。直接上代码:
const config = { get: { skip: { required: false, default: 0, number: true, in: ['query'], errorMessage: 'Skip is invalid', } } }; // 遍历所有HTTP请求方法(比如get、post) for (const method in config) { if (config.hasOwnProperty(method)) { const paramConfigs = config[method]; // 遍历当前方法下的所有参数配置 for (const paramName in paramConfigs) { if (paramName === 'skip') { // 找到skip配置,接下来检查它的类型约束 checkSkipTypeRule(paramConfigs[paramName]); } } } }
第二步:实现核心类型检查逻辑
我们需要确认两件关键事:一是skip明确开启了数值类型允许(number: true),二是没有同时允许其他非数值类型(比如突然加个string: true就不符合要求)。写个函数来做这件事:
function checkSkipTypeRule(skipConfig) { // 先确认是否开启了数值类型的允许设置 const allowsNumber = skipConfig.number === true; // 检查有没有同时开启其他类型的允许开关 const otherTypeKeys = ['string', 'boolean', 'array', 'object']; // 排除number本身 const allowsOtherTypes = otherTypeKeys.some(type => skipConfig[type] === true); // 判断配置是否符合要求 if (!allowsNumber || allowsOtherTypes) { let errorMsg = '❌ 错误:skip字段未仅接受数值类型'; if (!allowsNumber) { errorMsg += ' - 未开启number类型的允许设置'; } if (allowsOtherTypes) { errorMsg += ' - 同时允许了其他非数值类型'; } console.error(errorMsg); // 若需要中断流程,也可以改成 throw new Error(errorMsg); } else { console.log('✅ skip字段仅接受数值类型,配置符合要求'); } }
第三步:适配更复杂的配置结构(可选)
如果你的配置以后可能嵌套得更深(比如某个请求方法下还有子路由配置),可以用递归遍历的方式,不管skip在哪一层都能被找到并检查:
function traverseAllConfigs(obj) { for (const key in obj) { if (obj.hasOwnProperty(key)) { const value = obj[key]; if (typeof value === 'object' && value !== null) { if (key === 'skip') { checkSkipTypeRule(value); } // 递归遍历子对象 traverseAllConfigs(value); } } } } // 调用递归遍历函数 traverseAllConfigs(config);
测试不同场景
- 用你提供的原配置运行,会输出
✅ skip字段仅接受数值类型,配置符合要求 - 要是把
number: true改成false,或者添加string: true这类其他类型允许配置,就会弹出对应的错误提示
内容的提问来源于stack exchange,提问作者shubhasis padhi
相关产品推荐
相关产品推荐

