TS1415: Source from referenced project '{0}' included because '--module' is specified as 'none'

TypeScript is a superset language of JavaScript, meaning it extends JavaScript by adding static types and additional features. While JavaScript allows developers to write code without defining the type of data passed between variables and functions, TypeScript introduces types, which enable developers to ensure their code is less prone to runtime errors. Types represent the shape or data structure (e.g., string, number, array, custom objects) expected in variables, functions, and other components of code.

By enforcing type definitions, TypeScript improves code readability, assists with debugging, and provides better tooling through features like autocompletion and error detection in IDEs. If you're exploring TypeScript or want to learn how to use AI tools for coding help, check out GPTeach as a resource to build your coding skills.

One important feature of TypeScript is its ability to define types explicitly, which also includes supporting advanced concepts like interfaces (used to define object shapes), enums (used for constants), and many others.


What are Enums in TypeScript?

An enum (short for "enumeration") is a special type in TypeScript that represents a set of named constant values. Enums make it easy to define a group of related constants that are likely to be used together, improving code readability and making it safer to work with fixed values.

Here’s a simple example of an enum:

enum Direction {
    Up,
    Down,
    Left,
    Right
}

let currentDirection: Direction = Direction.Up;
console.log(currentDirection); // Output: 0 (default enum values are indexed as integers starting at 0)

Enums can also have custom values:

enum HttpStatus {
    OK = 200,
    NotFound = 404,
    InternalServerError = 500,
}

const responseStatus: HttpStatus = HttpStatus.OK;
console.log(responseStatus); // Output: 200

Enums are particularly useful when managing constant values, such as error codes or configuration values.


Understanding TS1415: Source from referenced project '{0}' included because '--module' is specified as 'none'

Let's shift focus to the error message: TS1415: Source from referenced project '{0}' included because '--module' is specified as 'none'. This error can initially be difficult to understand, so here we’ll break it down in simple terms.

Why Does This Error Happen?

This error typically occurs when TypeScript compiles source files from a referenced project (a project referenced via the tsconfig.json file of another project) while the --module compiler option is set to none.

In TypeScript, the --module option defines how the output JavaScript file handles modules. For example:

  • Setting --module to commonjs or es2020 defines how the code exports and imports modules.
  • If --module is set to none, TypeScript does not use any module system, treating all files as part of a single global namespace.

The problem arises because with --module set to none, certain type resolution mechanisms or project references can behave unexpectedly. TypeScript might attempt to include all files in the referenced project by default, even if they are unnecessary for your primary project.


Example of Code That Triggers TS1415

Imagine you have two projects: Project A (main project) and Project B (a referenced library). Project A includes a tsconfig.json file that references Project B.

Project B (tsconfig.json)

{
  "compilerOptions": {
    "module": "none",
    "outDir": "./dist",
    "declaration": true
  },
  "include": ["src/**/*"]
}

Project A (tsconfig.json)

{
  "compilerOptions": {
    "module": "commonjs",
    "outDir": "./dist"
  },
  "references": [
    { "path": "../project-b" }
  ]
}

If Project B has types or source files that aren’t properly defined or excluded, and --module is set to none for Project B, TypeScript will throw:

TS1415: Source from referenced project 'project-b' included because '--module' is specified as 'none'.


How to Fix TS1415

To resolve TS1415, you need to adjust your tsconfig.json configuration file (of the referenced project) to specify a module system or ensure proper file exclusions. Below are steps and examples for addressing the error:

1. Update the --module Option

Change the module option in the referenced project to a valid module system (e.g., commonjs or es2020). For example, update Project B's tsconfig.json:

{
  "compilerOptions": {
    "module": "commonjs", // Use a valid module system
    "outDir": "./dist",
    "declaration": true
  },
  "include": ["src/**/*"]
}

This ensures Project B uses a proper module system compatible with Project A.

2. Add Explicit File Includes/Excludes

Sometimes, the error occurs because TypeScript mistakenly includes unnecessary files. To fix this, clearly define included and excluded files in the tsconfig.json of the referenced project. For example:

{
  "compilerOptions": {
    "module": "commonjs",
    "outDir": "./dist",
    "declaration": true
  },
  "include": ["src/**/*.ts"],
  "exclude": ["src/tests/**/*"]
}

These include/exclude settings avoid compiling extra files that could trigger the error.

3. Use Composite Projects Carefully

If your project references other sub-projects using TypeScript’s project references (references in tsconfig.json), ensure all referenced projects are configured correctly with the appropriate module system:

{
  "compilerOptions": {
    "composite": true, // Required for project references
    "module": "es2020",
    "declaration": true,
    "outDir": "./dist"
  }
}

Important to Know!

  • When using --module set to none, TypeScript disables all module-related functionality. This is suitable only for very specific scenarios (like working on legacy projects) and should generally be avoided.
  • The error TS1415: Source from referenced project '{0}' included because '--module' is specified as 'none' can be tricky because module configurations between multiple projects need to align.

FAQ Section

Q1: What does the --module option mean in TypeScript?

The --module option tells TypeScript how to handle modules (e.g., CommonJS, ES6 Modules). If set to none, it disables module systems entirely.

Q2: Why does TS1415 occur only in multi-project setups?

TS1415 appears when a project references another project with misconfigured --module settings. The none value causes TypeScript to include all source files unnecessarily.

Q3: Can I set --module to none for any project?

It is not recommended unless you are working on legacy projects or need a flat global namespace. Modern JavaScript development uses module systems like CommonJS or ES modules.


In summary, when encountering the TS1415: Source from referenced project '{0}' included because '--module' is specified as 'none' error, always check your tsconfig.json configuration. Start by updating the module option, clarify file inclusions/exclusions, and ensure composite project configurations are valid.

By understanding TypeScript’s type system, tsconfig.json settings, and module resolutions, you can confidently fix this error while improving overall project structure! If you’d like to master TypeScript concepts or explore tools like GPTeach to enhance your skills, start today! Happy coding!