Created at

How to prevent global scope pollution

In TypeScript, just as in ECMAScript 2015, any file containing a top-level import or export is considered a module.

Conversely, a file without any top-level import or export declarations is treated as a script whose contents are available in the global scope.

So you will get the Duplicate identifier 'TreeNode' error since there are two class TreeNode in the global scope now.

// File 1: file-1.ts
class TreeNode {
  // definition
}

// File 2: file-2.ts
class TreeNode {
  // definition
}

There are two ways to prevent this global scope pollution:

  • Using the export {} syntax at the end of each file. This syntax effectively marks the file as a module.
  • Setting the compiler option module as NodeNext.