microsoft / microsoft/TypeScript

Uncaught compiler error: Block-scoped variable from import used before its declaration.

Ouverte
#17,308 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Domain: Binder
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

TypeScript Version: 2.4.0 / nightly (2.5.0-dev.201xxxxx)

Code

Input Typescript

namespace A {
    export namespace B {
        export class C {
            constructor()
            {
                console.log("Hello World");
            }
        }
    }
}

import myA_B = myA.B;
import myA = A;

new myA_B.C();

Output JavaScript from tsc

var A;
(function (A) {
    var B;
    (function (B) {
        var C = (function () {
            function C() {
                console.log("Hello World");
            }
            return C;
        }());
        B.C = C;
    })(B = A.B || (A.B = {}));
})(A || (A = {}));
var myA_B = myA.B;
var myA = A;
new myA_B.C();

Expected behavior:
Expected the typescript compiler error Block-scoped variable 'myA' used before its declaration.

Actual behavior:
Runtime error of Uncaught TypeError: Cannot read property 'B' of undefined

Comments
The typescript compiler will catch this if I use const or let keywords instead, so I expected the same error handling for import in this case.

My team prefers using import over const or let when we can for performance of not pulling in javascript code from external files when we are only referencing types.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire avec tsc le cas TypeScript 2.4 signalé et comparez-le avec la variante const ou let décrite dans l’issue. Suivez la manière dont le compilateur traite l’alias d’importation et le namespace référencé avant leur déclaration. Le travail est terminé lorsque le code signalé reçoit le diagnostic attendu à la compilation, au lieu de produire du JavaScript qui échoue à l’exécution.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript, typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.