This is what works for me with the latest TS and VsCode as of November 2017.
The following configuration will help you start the server and debug TS inside VS Code
Here is what my tsconfig.json looks like:
{ "compilerOptions": { "declaration": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, "lib": ["es2017", "dom"], "module": "commonjs", "moduleResolution": "node", "outDir": "../build", "sourceMap": true, "target": "es2016", "typeRoots": [ "../node_modules/@types" ] }, "include": [ "**/*.ts" ], "exclude": [ "../node_modules", "../*.js" ] }
And here is what my directory structure looks like:

If you pay attention, you will see that my src folder and assembly (containing the resulting transferred JS and map files) live side by side, which really helps me maintain the logical directory structure.
Ok, now the launch version appears:
{ "type": "node", "request": "launch", "name": "Start and Debug", "preLaunchTask": "nb-tsc-watch", "timeout": 10000, "program": "${workspaceFolder}/backend/src/app.ts", "restart": true, "cwd": "${workspaceRoot}", "outFiles": [ "${workspaceFolder}/backend//build/**/*.js" ], "sourceMaps": true }
You can use any preLaunchTask you want to use, or even skip it. If you miss it, you will have to translate TS to JS manually.
This is what I do in my nb-tsc-watch task
{ "label": "nb-tsc-watch", "type": "typescript", "tsconfig": "backend/src/tsconfig.json", "option": "watch", "problemMatcher": [ "$tsc-watch" ] }