TypeScript is tremendously helpful while developing Node.js applications. Let's see how to configure it for a seamless development experience.
Setting up TypeScript
First, we need to install TypeScript. We can do this by running the following command:
npm i -D typescript
Next, we need to create a tsconfig.json
file in the root of our project. This file will contain the TypeScript configuration for our project. Here is an example of a tsconfig.json
file that I picked from Total TypeScript and added a few more things (read the code and pay attention to the comments):
{ "compilerOptions": { /* Base Options: */ "esModuleInterop": true, "skipLibCheck": true, "target": "es2022", "allowJs": true, "resolveJsonModule": true, "moduleDetection": "force", "isolatedModules": true, "verbatimModuleSyntax": true, /* Setting ~ as the alias for the src/ directory */ "baseUrl": ".", "paths": { "~/*": ["src/*"] }, /* Strictness */ "strict": true, "noUncheckedIndexedAccess": true, "noImplicitOverride": true, /* If transpiling with TypeScript: */ "module": "NodeNext", "outDir": "dist", "sourceMap": true, /* AND if you're building for a library: */ "declaration": true, /* AND if you're building for a library in a monorepo: */ "composite": true, "declarationMap": true, /* If NOT transpiling with TypeScript: */ "module": "preserve", "noEmit": true, /* If your code runs in the DOM: */ "lib": ["es2022", "dom", "dom.iterable"], /* If your code doesn't run in the DOM: */ "lib": ["es2022"], }, /* I'm considering all your code is in src/ */ "include": ["src/**/*.ts"] }
Setting up the build script
Next, we need to set up a build script that will compile our TypeScript code to JavaScript. First, install tsc-alias
to handle the aliases we defined in the tsconfig.json
file:
npm i -D tsc-alias
Then, you can add the build
script by adding the following script to our package.json
file:
{ "scripts": { "build": "tsc && tsc-alias" } }
Setting up the development script
Next, we need to set up a development script that will watch for changes in our TypeScript files and recompile them. Personally, I like to use tsx
, as it provides a much faster development experience compared to the built-in TypeScript watcher or ts-node. First, install tsx
:
npm i -D tsx
Then, you can add the dev
script (in order to start the project in development mode) by adding the following script to your package.json
file:
{ "scripts": { "build": "tsc && tsc-alias", "dev": "node --import=tsx --watch ./src/index.ts" } }
Yes, you won't get typechecks while developing using tsx
, but you can run npm run build
for that or add a new typecheck
scripts to your package.json
, and run it whenever you want to check for type errors:
{ "scripts": { "build": "tsc && tsc-alias", "dev": "node --import=tsx --watch ./src/index.ts", "typecheck": "tsc --noEmit" } }
Top comments (0)