Skip to content

invalid drop of require statement although there is a reference to it in emitted js code, #12888

@dqweek

Description

@dqweek

TypeScript Version: 2.1.1 / nightly (2.2.0-dev.201xxxxx)

Code

file: auxilry.ts

export class SomeClass {
    field: string;
}

file: main.ts

import { SomeClass } from './auxiliry';

function annotation(): ClassDecorator {
    return (target: any, key: string | symbol): void => { };
}

@annotation()
export class ClassA {
    array: SomeClass[];

    constructor(...init: SomeClass[]) {
        this.array = init;
    }
}

Expected behavior:

runtime should not throw exception

Actual behavior:

exception thrown on execution:

Uncaught ReferenceError: auxiliry_1 is not defined

additional data (compiled js):

"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
function annotation() {
    return function (target, key) { };
}
var ClassA = (function () {
    function ClassA() {
        var init = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            init[_i] = arguments[_i];
        }
        this.array = init.slice();
    }
    return ClassA;
}());
ClassA = __decorate([
    annotation,
    __metadata("design:paramtypes", [typeof (_a = typeof auxiliry_1.SomeClass !== "undefined" && auxiliry_1.SomeClass) === "function" && _a || Object])
], ClassA); /// <-- as I can see the require statement is dropped from emitted code, although, there is a reference to it here.
exports.ClassA = ClassA;
var _a;

probagrelated to #596

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptFixedA PR has been merged for this issue

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions