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

177
Visualizações
El singleton TypeScript generado con una función de fábrica pierde tipeos

Tengo un SDK de javascript azucarado donde se crea una instancia de la biblioteca en cualquier punto dado en tiempo de ejecución, pero a partir de ese momento es un singleton. Como en, las llamadas repetidas al default del archivo devuelven la misma instancia.

Mi problema es que mis tipos se pierden entre la definición de la biblioteca y la creación de instancias.

Ver este código:

 const Factory = (args?: Record<string, unknown>) => { return { action: { method: (code: 'SOME'|'CODES') => console.log('Doing something with', code) } } } let instance export default (args?: Record<string, unknown>) => { if (!instance) instance = Factory(args) return instance }

Si instalo Factory directamente, estoy equipado con tipos correctos. Sin embargo, la interfaz exportada para el archivo intenta garantizar que la instancia siempre devuelva un singleton. En ese proceso perdemos tipificaciones.

¿Cómo debo escribir instance aquí, para retener los tipos?

Restricciones:

  • No quiero tener que volver a escribir todo en una interfaz que coincida vagamente con la definición
  • El usuario puede crear una instancia de la instancia inicial en cualquier momento durante el tiempo de ejecución (no se puede suponer que se crea en el arranque)
  • No debería usar clases debido a la posible complejidad de los métodos anidados que se devuelven.
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Puede usar el tipo de utilidad ReturnType para obtener el tipo inferido de la instancia que devuelve Factory y luego usarlo en el tipo de instance y el tipo de devolución de la exportación predeterminada. Consulte LibInstanceType continuación:

 const Factory = (args?: Record<string, unknown>) => { return { action: { method: (code: 'SOME'|'CODES') => console.log('Doing something with', code) } } }; type LibInstanceType = ReturnType<typeof Factory>; let instance: LibInstanceType | undefined; export default (args?: Record<string, unknown>): LibInstanceType => { if (!instance) instance = Factory(args); return instance; };

Enlace del patio de recreo

about 4 years ago · Juan Pablo Isaza 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