Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

164
Views
¿Cómo usar Object.defineProperty para getters en Typescript?

He usado una implementación como se indica a continuación en JavaScript.

 class Base { installGetters() { Object.defineProperty(this, 'add', { get() { return 5; } }); } } class New extends Base { constructor() { super(); this.installGetters(); } someAddition() { return 10 + this.add; } }

Definí la propiedad getter add en la función de la clase principal - Base y usé esa propiedad en la clase secundaria New después de llamar a la función installGetters() en el constructor de la clase secundaria. Esto funciona para JavaScript, pero this.add arroja un error en el caso de Typescript. Cualquier ayuda sería muy apreciada.

Mi principal motivación para hacer esto es que quiero pasar un objeto a installGetters() para que pueda generar múltiples getters con las claves de objeto como nombres de getter y los valores devueltos por las funciones de getter correspondientes.

Esto funciona en JavaScript, por lo que mi principal curiosidad es si esto no es posible en TypeScript o si estoy haciendo algo mal.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Aunque este es un patrón bastante extraño, proporcionaré una respuesta a su pregunta real.

TypeScript no es lo suficientemente inteligente como para inferir el tipo Base real en función de un método llamado en un constructor de subclase, por lo que debe declare :

 declare readonly add: number;

patio de recreo mecanografiado

about 4 years ago · Juan Pablo Isaza Report

0

Habiendo aplicado la herencia, sugeriría usar protected :

los miembros protegidos solo son visibles para las subclases de la clase en la que están declarados.

 class Base { protected add!: number; installGetters() { this.add = 5; } }

Problema relacionado con su problema: https://github.com/microsoft/TypeScript/issues/28694

about 4 years ago · Juan Pablo Isaza Report

0

La razón de esto es probable que TypeScript no sepa sobre el captador que agregó. No hay que escribir mecanografiado que indique que este captador existe y el mecanografiado no puede saber mágicamente que agregó la función de captador y cómo se vería. O define el getter en la clase base o, en caso de que esto no sea posible, probablemente no haya otra forma que convertir esto en cualquiera.

 someAddition() { return 10 + (this as any).add }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!