These launch configs will allow you to debug typescript files directly from VSCode. It will honor the tsconfig and resolve node modules properly. You do not need to install ts-node or nodemon, as everything is run using npx. The first
{
"configurations": [
{
"type": "node",
"request": "launch",
"name": "ts-node - current file",
"runtimeExecutable": "npx",
"runtimeArgs": ["-y", "ts-node"],
"program": "${file}",
"cwd": "${fileDirname}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"type": "node",
"request": "launch",
"name": "ts-node - watch current file",
"runtimeExecutable": "npx",
"runtimeArgs": [
"-y",
"nodemon",
"-q",
"--exec",
"npx",
"-y",
"ts-node"
],
"program": "${file}",
"cwd": "${fileDirname}",
"restart": true,
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
],
}The first one is pretty straightforward. If the file is src/path/to/example.ts, this is the equivalent of:
cd src/path/to
npx -y ts-node example.ts
It's better to use cwd in this way, as this allows for nested tsconfig files as may appear in a monorepo.
The second one had to be a bit sneaky because of quirks in nodemon. They recently added TypeScript support, but internally it simply runs the ts-node command instead of node. However, to avoid the dependency for those using regular JS, they didn't add ts-node to its dependencies, so npx nodemon doesn't supply the dependency. You could avoid this by installing it in the project with npm i -D ts-node, but I wanted these to work without installing anything. This is solved with the --exec option by compounding npx scripts. The second config is equivalent to:
cd src/path/to
npx -y nodemon -q --exec 'npx -y ts-node' ./example.ts