microsoft / microsoft/TypeScript

ES6 module immediately exported var clash with local "exports" variable

Abierto
#33,043 4 comentarios 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Domain: ES Modules Help Wanted
Lenguaje dominante
Go
Estrellas
111k
Forks
14.4k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

Descripción

TypeScript Version: 3.5.1 (playground), 3.5.3

Search Terms:
es6 module exports object scope declare declaration overwrite

Code

export const a = 1
function b () {
    const exports = 2
    console.log(a)
}
b()

Expected behavior:
output from babel with es2015 preset
https://babeljs.io/repl#?babili=false&browsers=&build=&builtIns=false&spec=false&loose=false&code_lz=KYDwDg9gTgLgBAYwgOwM7wIZwLxwIwBQAZgK7IIwCWKcARnABQCUcA3gXJ4iunKJLFQ44AJg5ckaCABtgAOmkQA5gwxMCAXwK1mQA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=false&presets=es2015&prettier=false&targets=&version=7.5.5&externalPlugins=

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.a = void 0;
var a = 1;
exports.a = a;

function b() {
  var exports = 2;
  console.log(a);
}

b();

Actual behavior:
console.log is referencing the local exports.a instead of the global const a

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.a = 1;
function b() {
    var exports = 2;
    console.log(exports.a);
}
b();

However, if I split the export const into two, it will work.

const a = 1
export { a }

Playground Link:
http://www.typescriptlang.org/play/?target=1#code/KYDwDg9gTgLgBAYwgOwM7wIZwLxwIwCwAUAGYCuyCMAlinAEZwAUAlHAN7FzeIrpyhIsVDjgAmLjyRoIAG2AA6WRADmTDC2IBfYvVZA

Related Issues: can't find

Guía de contribución

Abrir la guía de contribución

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.

Línea de trabajo

Reproduce el código proporcionado en el TypeScript playground y compara el JavaScript emitido con la salida de Babel enlazada en el issue. Rastrea el manejo de una variable exportada inmediatamente y de la vinculación local anidada exports; se considera terminado cuando el console.log generado sigue haciendo referencia al valor a nivel de módulo en lugar de a la vinculación local.

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

Evaluación

Stack tecnológico
javascript, typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.