# TypeScript: Fix the esModuleInterop Default Import Error

> Fix the can only be default-imported using the esModuleInterop flag error in TypeScript by setting esModuleInterop to true in your tsconfig.json

**URL:** https://sentry.io/answers/typescript-can-only-be-default-imported-using-the-esmoduleinterop-flag/

---

## The Problem

When using the TypeScript compiler to create JavaScript files from TypeScript files, in a process known as transpiling, you may get the following error in your terminal:

```
This module is declared with 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.
```

This error occurs when the TypeScript config [`esModuleInterop`](https://www.typescriptlang.org/tsconfig/#esModuleInterop) flag either isn't set or is set to `false`, and a non-ES module package is imported, by default, in an [ES module](https://nodejs.org/api/esm.html) file.

TypeScript treats [CommonJS](https://nodejs.org/api/modules.html), AMD, and UMD modules similarly to how it treats ES modules. This can cause issues with importing modules from CommonJS modules into ES modules, as there may be inconsistencies with the default export type. The `default` export is the `exports` object from Node version 14.13.0. However, different JavaScript bundlers may use `exports.default` as the default export.

## The Solution

Set the `esModuleInterop` flag to `true` in your `tsconfig.json` file. Its default value is `true` if the TypeScript config option [`module`](https://www.typescriptlang.org/tsconfig/#module) is `node16` or `nodenext`.

Setting the `esModuleInterop` flag to `true` in your `tsconfig.json` file also adds extra interoperability code to the transpiled JavaScript to handle different types of default imports from CommonJS modules.

However, you may have `esModuleInterop` set to `true` but still find that you get the error when you run the `tsc` command and specify the input file as follows:

```sh
tsc server.ts
```

This is because when you specify input files, `tsconfig.json` files are ignored.

Next, set the output folder for the transpiled JavaScript:

```json
"outDir": "./dist",
```

Transpile using the `tsc` command and run the transpiled JavaScript code:

```sh
tsc && node ./dist/server.js
```

You can also use [Nodemon](https://nodemon.io/) to transpile and run your TypeScript code. It automatically restarts your Node.js application when file changes are detected:

```sh
nodemon ./server.ts
```

Nodemon version 1.19 added inbuilt support for TypeScript files. It uses [ts-node](https://typestrong.org/ts-node/) to run your Node.js application.

---

*Source: [sentry.io/answers/typescript-can-only-be-default-imported-using-the-esmoduleinterop-flag/](https://sentry.io/answers/typescript-can-only-be-default-imported-using-the-esmoduleinterop-flag/)*
