Proxy与元编程:构建不可变的类型校验层
使用Proxy拦截对象set操作,实现运行时类型验证与不可变约束。 · 难度:入门 · +10XP
Proxy与元编程:构建不可变的类型校验层
Proxy是ES6提供的元编程能力,允许我们自定义基本操作的拦截行为。本教程将利用set和get trap实现一个验证器:当给对象属性赋值时,自动检查类型是否正确且不允许删除已有属性。通过handler的set方法抛出类型错误,可以构建类似TypeScript的运行时类型保障系统。
function createTypedObject(initial, schema) {
return new Proxy(initial, {
set(target, prop, value) {
if (schema[prop] && typeof value !== schema[prop]) {
throw new TypeError(属性 ${prop} 必须为 ${schema[prop]});
}
target[prop] = value;
return true;
},
deleteProperty() {
throw new Error('禁止删除属性');
}
});
}
const user = createTypedObject({name:'Alice'}, {name:'string'});
user.name = 123; // TypeError