Proxy实现模式匹配与数据验证
用Proxy对象构建一个声明式的模式匹配系统,对对象的属性访问、赋值进行拦截,实现结构校验和自动格式化。 · 难度:入门 · +10XP
Proxy实现模式匹配与数据验证
JavaScript的Proxy允许拦截几乎任何对象操作。本教程将利用get/set陷阱构建一个验证层,自动检查属性类型和范围,并可实现类似函数式语言中的模式匹配。你将学会如何通过Proxy实现“null安全”访问(?.)的底层机制,以及如何构建一个可组合的校验管道。
function createValidator(rules) {
return new Proxy({}, {
set(target, key, value) {
if (rules[key]) {
const rule = rules[key];
if (rule.type && typeof value !== rule.type) {
throw new Error(${key} must be ${rule.type});
}
if (rule.min !== undefined && value < rule.min) {
throw new Error(${key} too small);
}
}
target[key] = value;
return true;
}
});
}
const user = createValidator({ age: { type: 'number', min:0 } });
user.age = 25; // ok
// user.age = -1; // throws