Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: ESM default import This expression is not callable #241

Merged
merged 1 commit into from
Aug 28, 2023

Conversation

yutak23
Copy link
Contributor

@yutak23 yutak23 commented Aug 28, 2023

This ought to fix #228

ESM seems incompatible in CommonJS PJs with default export (see microsoft/TypeScript#52086).
I think there are two solutions to make TypeScript types compatible with both CommonJS and ESM.

  1. Create a new type definition for ESM
    reference: https://www.typescriptlang.org/docs/handbook/esm-node.html#packagejson-exports-imports-and-self-referencing
  2. Change type definitions to support both CommonJS and ESM

Case 1, I would make a copy of the current index.d.ts, rename the file to index.d.mts, and change package.json as follows.

  "exports": {
    ".": {
      "import": {
        "types": "./index.d.mts",
        "default": "./lib/esm/index.js"
      },
      "require": {
        "types": "./index.d.ts",
        "default": "./index.js"
      }
    },
    "./package.json": "./package.json"
  }

However, I think this is redundant and low-maintainability because we have to manage two type definitions, so I tried to modify it in the second way(Case 2).

Explanation of this modification

  • By setting export = , both CommonJS and ESM are supported.
    I do not expect any impact on existing CommonJS implementations of TypeScript developers. Originally, when using export default, as described in Default Exports, the esModuleInterop option must be used, and testing has confirmed that it can be compiled with this setting.
    Also, testing confirms that the project can be compiled with the project in the ESM configuration.

For this change, I refer to the following

@yutak23 yutak23 changed the title fix: ESM default import This expression is not callable fix: ESM default import This expression is not callable Aug 28, 2023
@yutak23
Copy link
Contributor Author

yutak23 commented Aug 28, 2023

@mindhells

To avoid increased maintenance costs I have changed the content of the PR from #230.

I would appreciate it if you could review and respond to the content of the PR so that it can be made available to ES Module projects.

@mindhells
Copy link
Member

LGTM and don't expect any impact on CommonJS either, but I'll publish as a new minor just in case.

@mindhells mindhells merged commit fa31aea into softonic:master Aug 28, 2023
4 checks passed
@mindhells
Copy link
Member

Published as 3.7.0
Thanks a lot @yutak23

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ESM default import This expression is not callable
2 participants