ctimmerm/axios-mock-adapter

Types are broken with CJS/Typescript

orgads opened this issue · 8 comments

import MockAdapter from 'axios-mock-adapter';

This is transpiled into:

const axios_1 = require("axios");
const axios_mock_adapter_1 = require("axios-mock-adapter");
// ...
const mockAxios = new axios_mock_adapter_1.default(axios_1.default);

Following the changes in fd982cd, this no longer builds.

error TS1259: Module '".../node_modules/axios-mock-adapter/types/index"' can only be default-imported using the 'esModuleInterop' flag
index.d.ts(81, 1): This module is declared with 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.

This should be fixed with v1.21.4

It's not fixed, sorry.

We're experiencing this issue as well. What I have noticed is that I'm getting the above error on a MacBook M2 machine, yet it works fine on Intel machines.

Upgrading to v1.21.4 did not work.

Edit: (Update) - Rolling back to version 1.21.2 works fine.

Also getting typing errors while using v1.21.4 as mentioned here in this comment.

Thanks for pinging me in the other issue @mgrejanin.

If you run into this, this probably means you should use one of these:

  • For libraries or Node.js applications:
    import MockAdapter = require('axios-mock-adapter')
    and/or
    {
      "compilerOptions": {
        "module": "node16"
      }
    }
  • For web applications:
    {
      "compilerOptions": {
        "module": "esnext",
        "moduleResolution": "bundler",
        "esModuleInterop": true
      }
    }

However, since MockAdapter has a static property default, using a default import should technically work as well. This is fixed by #372.

@remcohaszing It's fixed in v1.21.5. Thank you!

Not sure, but I´m using v1.21.5 and have the exact same problems.
I´m not sure, but I´m pretty sure that my typescript version is constantly confusing MockAdapter as a class and namespace.
Is there any reason why the types namespace and class name should be exactly the same?
eslint is confuse, typescript is confuse, even I´m confuse about it.

By using the same name for the namespace and the value, it's possible to export types in a project that uses module.exports =. :)

What's not working for you? Can you make a public reproduction?