Estoy tratando de permitir un acceso profundo y remoto al almacenamiento utilizando la sintaxis de encadenamiento JS nativa. Establezco un proxy para construir una cadena/ruta de acceso, luego, cuando se llama al final de la cadena, recuperamos el objeto del almacenamiento, accedemos a la propiedad profunda y lo devolvemos. Un caso simplificado de este tipo de encadenamiento de comodines es el siguiente:
Si definimos una clase de la siguiente manera
class TestClass{ private handler = { chain: [], get(target: TestClass, key: any){ chain.push(key); return new Proxy(target, this); }, apply(target, thisArg, argumentsList){ const lastArg = target[this.chain[this.chain.length - 1] if(typeof target[lastArg] === "function") return target[lastArg](...argumentsList); console.log(this.chain); this.chain = []; } } constructor(){ return new Proxy(this, this.handler) } actualFunction(){ console.log("Called actual function") } }Podríamos hacer algo como:
let t = new TestClass(); tabcfunc(); Para que registre [a,b,c,func] o podríamos hacer
tabcactualFunction() Para que registre Called actual function . El problema aquí es que queremos recibir autocompletar y escribir sugerencias usando el acceso comodín, la única forma que he encontrado para habilitar esto hasta ahora es usar la definición de índice [x: string|number|symbol]: TestClass en la parte superior de la clase. Esto permite el acceso con comodines con sugerencias de tipo y finalización de código, pero arroja un montón de errores de TypeScript dentro de la propia clase.
Óptimamente, podría usar una definición de índice a lo largo de las líneas de [x: string|number|symbol]: literalType x in keyof TestClass ? any : TestClass
Cualquier sugerencia sobre cómo hacer que esto funcione es muy apreciada. Además, las decisiones/direcciones de diseño que pueden facilitar esto también son bienvenidas.