tsConfig.json configuration details
Sraban Pahadasingh June 23, 2024 06:31 PMThe tsconfig.json file is essential for configuring TypeScript projects, providing a wide range of options to control the compilation process. Below is a comprehensive list of tsconfig.json properties along with detailed descriptions and examples for each.
Overall Structure
A typical tsconfig.json file looks like this:
{
"compilerOptions": {
// Compiler options go here
},
"include": [
// File patterns to include
],
"exclude": [
// File patterns to exclude
],
"files": [
// Specific files to include
],
"references": [
// References to other tsconfig files for project references
],
"extends": "path/to/base/tsconfig",
"typeAcquisition": {
// Type acquisition options for type definitions
},
"compileOnSave": true,
"tsBuildInfoFile": "path/to/tsbuildinfo",
"watchOptions": {
// Options for the watch mode
},
"assumeChangesOnlyAffectDirectDependencies": true,
"plugins": [
// Plugins to extend TypeScript functionality
]
}
Detailed Descriptions
compilerOptions
- Purpose: Contains settings that influence the behavior of the TypeScript compiler.
- Type:
object -
Common Properties:
-
target: Specifies the output JavaScript version. Common values are"ES5","ES6","ES2015","ES2020", etc.{target": "ES6"} -
module: Determines the module code generation. Options include"commonjs","amd","esnext", etc.{"module": "commonjs"} -
strict: Enables all strict type-checking options.{"strict": true} -
outDir: Specifies the output directory for compiled files.{ "outDir": "./dist"} -
rootDir: Specifies the root directory of input files.{"rootDir": "./src"} -
sourceMap: Generates corresponding.mapfiles for debugging.{ "sourceMap": true} -
declaration: Generates corresponding.d.tsfiles for TypeScript definitions.{"declaration": true} -
moduleResolution: Specifies the module resolution strategy, such as"node"or"classic".{"moduleResolution": "node"} -
lib: Includes standard library files in the compilation.{"lib": ["ES6", "DOM"]} -
esModuleInterop: Enables interoperability between CommonJS and ES modules.{"esModuleInterop": true} -
jsx: Specifies the JSX code generation for React. Options are"preserve","react","react-jsx", etc.{"jsx": "react"} -
allowJs: Allows JavaScript files to be compiled.{"allowJs": true} -
checkJs: Type-checks JavaScript files.{"checkJs": true} -
baseUrl: Base directory for resolving non-relative module names.{"baseUrl": "./"} -
paths: A set of path mappings for module resolution.{"paths": { "@app/*": ["src/app/*"] }} -
typeRoots: Specifies directories containing type definitions.{"typeRoots": ["./node_modules/@types"]} -
noEmit: Disables the emitting of output files.{"noEmit": true} -
skipLibCheck: Skips type checking of declaration files.{"skipLibCheck": true} -
noImplicitAny: Raises errors on expressions and declarations with an impliedanytype.{"noImplicitAny": true} -
resolveJsonModule: Enables importing JSON modules.{"resolveJsonModule": true} -
emitDecoratorMetadata: Emits design-type metadata for decorators.{"emitDecoratorMetadata": true} -
experimentalDecorators: Enables experimental support for decorators.{"experimentalDecorators": true} -
incremental: Enables incremental compilation, which speeds up builds.{ "incremental": true} -
composite: Enables project compilation.{"composite": true} tsBuildInfoFile: Specifies the location of the build information file.{"tsBuildInfoFile": "./build/cache/tsbuildinfo.json"}
-
include
- Purpose: Specifies an array of file patterns to include in the compilation.
- Type:
array - Example:
{"include": ["src/**/*", "tests/**/*"]}
exclude
- Purpose: Specifies an array of file patterns to exclude from the compilation.
- Type:
array - Example:
{"exclude": ["node_modules", "dist", "build"]}
files
- Purpose: Lists specific files to include in the compilation, regardless of the
includeandexcludesettings. - Type:
array - Example:
{"files": ["src/index.ts", "src/globals.d.ts"]}
references
- Purpose: Specifies a list of project references, allowing TypeScript projects to depend on other TypeScript projects.
- Type:
array - Example:
{ "references": [ { "path": "../common" }, { "path": "../utilities" } ]}
extends
- Purpose: Allows the
tsconfig.jsonto extend another configuration file. - Type:
string - Example:
{ "extends": "./base/tsconfig.json" }
typeAcquisition
- Purpose: Controls the acquisition of type definitions for JavaScript projects.
- Type:
object - Properties:
enable: Enables type acquisition.{ "enable": true }include: Specifies a list of type definitions to include.{ "include": ["jest", "lodash"] }exclude: Specifies a list of type definitions to exclude.{ "exclude": ["express"] }
compileOnSave
- Purpose: If set to
true, TypeScript will compile files upon saving in the IDE. - Type:
boolean - Example:
{ "compileOnSave": true }
tsBuildInfoFile
- Purpose: Specifies the location of the build information file to store incremental compilation information.
- Type:
string - Example:
{ "tsBuildInfoFile": "./build/cache/tsbuildinfo.json" }
watchOptions
- Purpose: Specifies options for watching files in watch mode.
- Type:
object - Properties:
watchFile: Strategy for watching files.{ "watchFile": "useFsEvents" }watchDirectory: Strategy for watching directories.{ "watchDirectory": "useFsEvents" }fallbackPolling: Polling strategy for systems wherefs.watchcannot be used.{ "fallbackPolling": "dynamicPriority" }
assumeChangesOnlyAffectDirectDependencies
- Purpose: When set to
true, TypeScript assumes changes only affect direct dependencies, which can speed up incremental builds. - Type:
boolean - Example:
{ "assumeChangesOnlyAffectDirectDependencies": true }
plugins
- Purpose: Specifies a list of plugins that extend TypeScript's functionality.
- Type:
array - Example:
{ "plugins": [ { "name": "typescript-tslint-plugin" }, { "name": "typescript-styled-plugin" } ] }