Skip to content

"importHelpers": true combined with "module": "preserve" results in undefined helper usageΒ #59789

@clydin

Description

@clydin

πŸ”Ž Search Terms

importHelpers, module, preserve

πŸ•— Version & Regression Information

Fails with TS2354 in versions 5.4.x.
Generates invalid code in >= 5.5 including nightly.

⏯ Playground Link

https://www.typescriptlang.org/play/?esModuleInterop=false&declaration=false&importHelpers=true&target=9&jsx=0&module=200#code/FAMwrgdgxgLglgewgAgKIA8CGBbADgGwFMARQqBAJ0xkoAoBKALmUwgE9kBvAX2GAAEMOAiTKVqdesELpclGMij5MAZxXIAglz7BuQA

πŸ’» Code

function ExampleDecorator(): any {}

@ExampleDecorator()
export class A {}

πŸ™ Actual behavior

import * as tslib_1 from "tslib";
function ExampleDecorator() { }
let A = (() => {
    let _classDecorators = [ExampleDecorator()];
    let _classDescriptor;
    let _classExtraInitializers = [];
    let _classThis;
    var A = class {
        static { _classThis = this; }
        static {
            const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
            __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
            A = _classThis = _classDescriptor.value;
            if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
            __runInitializers(_classThis, _classExtraInitializers);
        }
    };
    return A = _classThis;
})();
export { A };

πŸ™‚ Expected behavior

import * as tslib_1 from "tslib";
function ExampleDecorator() { }
let A = (() => {
    let _classDecorators = [ExampleDecorator()];
    let _classDescriptor;
    let _classExtraInitializers = [];
    let _classThis;
    var A = class {
        static { _classThis = this; }
        static {
            const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
            tslib_1.__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
            A = _classThis = _classDescriptor.value;
            if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
            tslib_1.__runInitializers(_classThis, _classExtraInitializers);
        }
    };
    return A = _classThis;
})();
export { A };

Additional information about the issue

The namespace import identifier for tslib appears to not be used when generating the helper calls.

The baseline reference also appears to demonstrate the issue:

import * as tslib_1 from "tslib";
function foo(args) {
const { bar } = args, extraArgs = __rest(args, ["bar"]);
return extraArgs;
}
module.exports = foo;

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions