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

191
Visualizações
Cómo hacer que los espacios de nombres y los módulos externos vivan juntos en proyectos antiguos mecanografiados

Hola a todos,

Estoy luchando tratando de encontrar una manera de resolver el siguiente problema:

  1. Tengo una aplicación web compuesta por algunos js simples obtenidos de proyectos antiguos de TypeScript.
  2. Los antiguos proyectos de mecanografiado utilizan espacios de nombres y transpilan a javascript simple.
  3. Necesito ampliar una biblioteca antigua, proveniente de uno de los proyectos, con una parte nueva que usa importar/exportar para consumir algunas bibliotecas externas.
  4. También necesito compilar la parte nueva (que amplía la anterior) de manera que pueda usarla en proyectos escritos en estilo antiguo.

Lo he intentado creando un nuevo proyecto donde

  • Tengo un archivo "a.ts" donde estoy haciendo todas las importaciones que necesito y exporto una clase

     /// <reference path="../MyOldLib.d.ts" /> import * as AAA from 'ExternalComponentINeed'; export class XXX extends IJKW{ constructor() { super(); ... } ... }

donde IJK es el espacio de nombres como en la biblioteca anterior y W es una clase base que necesito ampliar

  • Tengo el archivo "b.ts" que importa el "a.ts" como:

     import * as A_ from "./A"; declare global { namespace IJK { export import A = A_; } }
  • Al final tengo el último archivo c.ts que declara el espacio de nombres

     namespace IJK { // Force `IJK` to be created at runtime. (() => {})(); }

Estoy usando webpack para construir todo junto con este archivo de configuración:

 const path = require('path'); module.exports = { entry: ['./src/c.ts','./src/b.ts'], module: { rules: [ { test: /\.tsx?$/, exclude: [/node_modules/], use: 'ts-loader', }, ], }, resolve: { extensions: ['.tsx', '.ts', '.js'], }, node: {global: true}, output: { library: 'mylibrary', libraryTarget: 'umd', filename: 'mylibrary.js', libraryExport: 'default', auxiliaryComment: 'Test Comment', path: path.resolve(__dirname, 'dist'), }, };

De esta manera puedo generar un archivo d.ts que puedo usar en el proyecto anterior, todo se compila pero en el navegador no funciona y emite lo siguiente:

 Uncaught TypeError: Cannot read properties of undefined (reading 'A')

y aquí está el punto donde se rompe el código:

 class c extends IJKW --> I is not defined

Sabemos que no es un buen camino a seguir, pero necesitamos un parche. Estamos planeando refactorizar nuestras bibliotecas, pero no podemos dejar de desarrollar y también nos gustaría tener una forma de refactorizar las bibliotecas poco a poco.

Cualquier ayuda sería muy apreciada. Gracias

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