Quiero construir tal función:
const recursionProxy = <T extends object>(subject: T) => new Proxy(subject, { get(target, key: keyof T) { const nestedSubject = target[key]; if (typeof nestedSubject === "object") { return recursionProxy(nestedSubject); } return nestedSubject ?? target._ ?? "Message not set"; }, }); pero bajo la línea recursionProxy(nestedSubject); hay un error que dice
[i] Argument of type 'T[keyof T]' is not assignable to parameter of type 'object'. por qué mecanografiado no tiene en cuenta que la declaración if, dentro de la declaración if nestedSubject es de tipo object
Parece funcionar si usa un predicado de tipo:
const isObject = (f: any): f is object => { if(typeof f === "object") return true; return false; } const recursionProxy = <T extends object>(subject: T) => new Proxy(subject, { get(target, key: keyof T) { const nestedSubject = target[key]; if (isObject(nestedSubject)) { return recursionProxy(nestedSubject); } return nestedSubject ?? target._ ?? "Message not set"; }, });También se puede agregar una verificación nula en el predicado, si es necesario:
const isObject = (f: any): f is object => { if(f === null) return false; if(typeof f === "object") return true; return false; }