typescriptmodule

Typescript ReferenceError: exports is not defined


Trying to implement a module following the official handbook, I get this error message:

Uncaught ReferenceError: exports is not defined

at app.js:2

But nowhere in my code do I ever use the name exports.

How can I fix this?


Files

app.ts

let a = 2;
let b:number = 3;

import Person = require ('./mods/module-1');

module-1.t

 export class Person {
  constructor(){
    console.log('Person Class');
  }
}
export default Person;

tsconfig.json

{
   "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": false,
        "sourceMap": true,
        "outDir": "scripts/"
    },
    "exclude": [
        "node_modules"
    ]
}

Solution

  • EDIT:

    This answer might not work depending if you're not targeting es5 anymore, I'll try to make the answer more complete.

    Original Answer

    If CommonJS isn't installed (which defines exports), you have to remove this line from your tsconfig.json:

     "module": "commonjs",
    

    As per the comments, this alone may not work with later versions of tsc. If that is the case, you can install a module loader like CommonJS, SystemJS or RequireJS and then specify that.

    Note:

    Look at your main.js file that tsc generated. You will find this at the very top:

    Object.defineProperty(exports, "__esModule", { value: true });
    

    It is the root of the error message, and after removing "module": "commonjs",, it will vanish.