Module lessons (1/2)
Configuration with tsconfig.json
The tsconfig.json file specifies the root directory of a TypeScript project and the compiler options required to build the project.
Whenever you run tsc in a project directory, the compiler searches for this file to guide its compilation behavior.
Structure of a tsconfig.json File
A typical configuration file looks like this:
{
"compilerOptions": {
"target": "es2022",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./dist"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
The main properties are:
compilerOptions: Settings for the compiler.include: Specifies the files or folders to compile.exclude: Specifies the files or folders to ignore during compilation.
Key Compiler Options
Here are some of the most important settings to know:
target: Specifies the version of JavaScript output by the compiler (e.g.,es5,es6/es2015,es2020,esnext).module: Specifies the module system used in the compiled code (e.g.,commonjs,esnext,node16).strict: Enables a broad suite of rigorous type-checking behaviors. It is highly recommended to set this totruefor maximum type safety. It enables options like:noImplicitAny: Raises an error on expressions and declarations with an impliedanytype when no type annotation is provided.strictNullChecks: Prevents assigningnullorundefinedto types that do not explicitly include them in their union.
Try it yourself
Exercise 1: Handling strictNullChecks
Under the strictNullChecks: true option in tsconfig.json, we cannot assign null or undefined to primitive types. Declare a function named parseAge that accepts an input of type string | null and returns a number if the input is not null and is a valid integer, otherwise it returns 0. Explicitly handle the null case to pass strict compilation.
Show hint
Check if input is null at the start of the function and return 0 immediately before processing the string.
Solution available after 3 attempts
Exercise 2: Strict Typing without Implicit Any
Under noImplicitAny: true, any parameter whose type cannot be inferred must be explicitly typed. Create a function named processItems that accepts an array items (array of numbers) and a callback function that takes a single number as an argument and returns nothing. Make sure not to use any and type everything explicitly.
Show hint
Declare the function with signature function processItems(items: number[], callback: (item: number) => void): void.
Solution available after 3 attempts