Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Object destructuring inside namespaces causes other exports to disappear

Abierto
#113 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
52/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
typescript, vite
Área
build-system

Línea de trabajo

Reproduce el ejemplo de namespace y desestructuración de objetos tanto en una compilación .ts como en una compilación .tsx usando vite-plugin-solid; después, compara la salida generada. Rastrea por qué el namespace .tsx transformado omite A.a y considera resuelto el problema cuando todas las exportaciones declaradas sigan disponibles en tiempo de ejecución.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I have a file containing the following code:

namespace B {
    export function c() { }
}

export namespace A {
    export const { c } = B; 
    export function a() { }
    export function b() { }
}

console.log(A);

When building it with vite it gets turned to this:

(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
    typeof define === 'function' && define.amd ? define(['exports'], factory) :
    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.alfa = {}));
})(this, (function (exports) { 'use strict';

    var B;
    ((B2) => {
      function c() {
      }
      B2.c = c;
    })(B || (B = {}));
    exports.A = void 0;
    ((A2) => {
      ({ c: A2.c } = B);
      function a() {
      }
      A2.a = a;
      function b() {
      }
      A2.b = b;
    })(exports.A || (exports.A = {}));
    console.log(exports.A);

    Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });

}));

And if I run it, it logs { c: [Function: c], a: [Function: a], b: [Function: b] }.
If I use vite-plugin-solid AND the file is a .tsx, the build result is the following:

(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
    typeof define === 'function' && define.amd ? define(['exports'], factory) :
    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.alfa = {}));
})(this, (function (exports) { 'use strict';

    let B;
    (function (_B) {
      function c() {}
      _B.c = c;
    })(B || (B = {}));
    exports.A = void 0;
    (function (_A) {
      const {
        c
      } = B;
      _A.c = c;
      function b() {}
      _A.b = b;
    })(exports.A || (exports.A = {}));
    console.log(exports.A);

    Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
}));

And it outputs { c: [Function: c], b: [Function: b] } when ran.
Why does "A.a" gets removed from the namespace?
Moreover, why does changing the code like this works?

namespace B {
    export function c() { }
}

export namespace A {
    export function a() { }
    export function b() { }
    export const { c } = B; // ← Moved on the bottom of the namespace
}

console.log(A);
Lenguaje dominante
TypeScript
Estrellas
522
Forks
72
Merge medio
21 h 42 min
PR fusionados (30 d)
35

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de solidjs/solid-vite-plugin

Todos los issues de solidjs/solid-vite-plugin

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.