Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

212
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda