MST

星途 面试题库

面试题:TypeScript中Proxy和Reflect的复杂应用场景

假设你有一个包含多层嵌套对象的TypeScript项目,要求使用Proxy和Reflect实现一个功能,当访问深层嵌套对象中不存在的属性时,自动创建相应层级的对象并返回,描述你的实现思路并给出关键代码示例。
19.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 创建一个函数,该函数接收一个目标对象作为参数,返回一个经过代理的对象。
  2. 在Proxy的get陷阱中,检查属性是否存在。如果不存在,且当前值是对象类型,就创建新的对象并设置到相应路径上。
  3. 使用Reflect来进行属性的获取和设置操作,以保持行为的一致性和兼容性。

关键代码示例

function deepAccess(target: any) {
    return new Proxy(target, {
        get(target, property) {
            if (!Reflect.has(target, property)) {
                Reflect.set(target, property, {});
            }
            const value = Reflect.get(target, property);
            return typeof value === 'object' ? deepAccess(value) : value;
        }
    });
}

// 使用示例
let obj = {};
let result = deepAccess(obj);
console.log(result.a.b.c); // 自动创建a, b, c对象层级并返回 {}