tslib icon indicating copy to clipboard operation
tslib copied to clipboard

__importDefault method may return an object with undefined default property

Open NealST opened this issue 3 years ago • 2 comments

In my project, I use tslib as the helper library. Today, I come across a mistake like this: image

the error line code that generated by tsc is:

typedocApp = new typedoc_1.default.Application();

and typedoc_1 is defined like this:

var typedoc_1 = tslib_1.__importDefault(require("typedoc"));

So, I readed the code of __importDefault method in tslib:

 __importDefault = function (mod) {
        return (mod && mod.__esModule) ? mod : { "default": mod };
    };

If a mod has __esModule property but does not have default property, such as typedoc, the error described above will be fired.

NealST avatar Dec 21 '22 08:12 NealST

Looking at typedoc, it does have an __esModule property, so perhaps you are importing it incorrectly? Which import style are you using:

// (1)
import typedoc from "typedoc";

// (2)
import * as typedoc from "typedoc";

Typedoc does not specify a default export, so you may need to use (2).

rbuckton avatar May 02 '23 15:05 rbuckton

yeah, you are right, but this design will result to the increasing cost of using tslib, developer must know whether the library has a default export firstly, and then they decide to how to import the library. I think this is not a good experience.

NealST avatar May 04 '23 02:05 NealST