Estoy tratando de reproducir los @Getters de la biblioteca común de Java Lombok. El resultado sería:
@Getters() export class Example { private property: string; } const test = new Example(); console.log(test.getProperty());Para hacer esto, trato de cambiar la definición de la clase js anulándola con un decorador TS:
import { capitalize } from "lodash"; export const Getters = () => <T extends {new(...args:any[]):{}}>(constructor:T) => { return class extends constructor { constructor(...args: any[]) { super(...args); const props = Reflect.ownKeys(this); props.forEach((prop: string) => { const capitalizedKey = capitalize(prop); const methodName = `get${capitalizedKey}`; Reflect.defineProperty(this, methodName, { value: () => this[prop], configurable: false, enumerable: false }); }); } } }Por el momento tengo este error La propiedad X no existe en el tipo X.
Pero puedo tener el resultado con esto:
console.log(test['getProperty']())¿Alguien sabe cómo cambiar la definición de clase con el decorador TS, por favor?
Zona de juegos: https://typescript-lodash-playground-1fuxpz.stackblitz.io