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

206
Views
RN: El lado estático de clase 'typeof *' extiende incorrectamente el lado estático de clase base 'typeof BaseModel

En reaccionar nativo, estoy extendiendo una clase ORM (según su documentación) pero recibo el siguiente error en el verificador VSCode TypeScript:

 Class static side 'typeof Animal' incorrectly extends base class static side 'typeof BaseModel'. Types of property 'database' are incompatible. Type '() => Promise<SQLite.WebSQLDatabase>' is not assignable to type 'void'.ts(2417)

Al final realmente funciona, pero me gustaría saber si hay una manera de definirlo más correctamente o más suelto para que no se genere ese error de verificación.
El módulo ORM es solo JS (no TypeScript) EDITAR: y es un tercero, por lo que realmente no puedo editarlo

Este es el método de la clase principal en BaseModel :

 static get database() { throw new Error('DB not defined') }

Este es el método de extensión del modelo Animal :

 static get database() { return async () => SQLite.openDatabase('database.db') }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

BaseModel infiere que el getter de la base de database de BaseModel es de tipo void . Esto se debe a que no devuelve un valor ni tiene un tipo explícito en ese captador. Entonces Animal intenta extender eso, y devuelve una función asíncrona, que no es nula, y obtienes el tipo de error.

La solución correcta aquí es escribir correctamente el valor de retorno de BaseModel.database . En este caso, creo que debería devolver una función asíncrona, que devuelve una promesa, que envuelve su objeto de base de datos.

 class BaseModel { static get database(): () => Promise<MyDb> { throw new Error('DB not defined') } }

Ahora Animal funciona sin errores tipográficos:

 class Animal extends BaseModel { static get database() { return async () => SQLite.openDatabase('database.db') } }

Y puedes obtener una referencia de base de datos:

 const db = await Animal.database()

Patio de recreo


Si diferentes subclases devolverían diferentes bases de datos con diferentes interfaces, entonces puede dejar que las subclases definan ese tipo de retorno:

 class BaseModel { static get database(): () => Promise<unknown> { // unknown here throw new Error('DB not defined') } }

Patio de recreo

over 4 years ago · Santiago Trujillo 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!