Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

210
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda