microsoft / tslib

Runtime library for TypeScript helpers.
BSD Zero Clause License
1.25k stars 126 forks source link

__importDefault method may return an object with undefined default property #190

Open NealST opened 1 year ago

NealST commented 1 year ago

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.

rbuckton commented 1 year ago

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).

NealST commented 1 year ago

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.