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

142
Views
Mecanografiado: tratando de llamar al método en una base abstracta con tipo derivado como parámetro

La base abstracta tiene un método que toma una base/derivada y realiza algo sobre ella. Parece que me estoy perdiendo algo con la escritura, tratando de averiguar qué.

Intento 1:

 abstract class Base { protected runFuncOnThis = (func: (baseOrDerived: Base) => void) => { func(this); }; } class Derived extends Base { public doIt = () => { this.runFuncOnThis((derived: Derived) => { // ERROR HERE console.log(derived); }); }; }

Error: el argumento de tipo '(derivado: Derivado) => vacío' no se puede asignar al parámetro de tipo '(baseOrDerived: Base) => vacío'. Los tipos de parámetros 'derivados' y 'baseOrDerived' son incompatibles. Falta la propiedad 'doIt' en el tipo 'Base' pero se requiere en el tipo 'Derivado'.ts(2345)

Intento 2:

 abstract class Base2 { protected runFuncOnThis = <T extends Base2>(func: (baseOrDerived: T) => void) => { func(this); // ERROR HERE }; } class Derived2 extends Base2 { public doIt = () => { this.runFuncOnThis((derived: Derived2) => { console.log(derived); }); }; }

Error: el argumento de tipo 'esto' no se puede asignar al parámetro de tipo 'T'. 'esto' es asignable a la restricción de tipo 'T', pero 'T' podría instanciarse con un subtipo diferente de restricción 'Base2'.ts(2345)

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

0

patio de juegos

Dado que está usando this en una función de flecha, significa que this es el contexto actual ( Base ) mientras que func quiere Derived como su argumento. Cambie el tipo de método a una función normal (que tiene su propio contexto) y this como T extends Base para satisfacer el argumento de func.

 abstract class Base { protected runFuncOnThis<T extends Base>(this: T, func: (baseOrDerived: T) => void) { func(this); }; } class Derived extends Base { public doIt = () => { this.runFuncOnThis((derived) => { console.log(derived); }); }; } class Derived2 extends Base { public doIt = () => { this.runFuncOnThis((derived) => { console.log(derived); }); }; public someProperty = 123; }
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!