Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeScript tsconfig settings for Node.js 12?

What is the optimal TypeScript tsconfig settings for outputting code that's going to be run on Node.js 12?

like image 433
Linus Unnebäck Avatar asked Jan 17 '20 12:01

Linus Unnebäck


People also ask

Does ts-node use Tsconfig?

ts-node supports a variety of options which can be specified via tsconfig.

Is it good to use TypeScript with node js?

That's why it would be great to have Typescript as the primary language to support Node. js functionality. This allows you to write server-side-based applications with strong type checking, which allows you to avoid runtime type errors and other Typescript advantages and take full advantage of Node.

What is Tsconfig json in node JS?

The tsconfig. json file specifies the root files and the compiler options required to compile the project. JavaScript projects can use a jsconfig. json file instead, which acts almost the same but has some JavaScript-related compiler flags enabled by default.


1 Answers

As of Node.js 12.0.0, 100% of ES2019 is supported. If you know that you are targeting that version or newer, the optimal config would look like this:

  • "module": "commonjs"

    Node.js is on it's way to add ES-Modules, but for now we'll have to stick with CommonJS.

  • "target": "es2019"

    This tells TypeScript that it's okay to output JavaScript syntax with features from ES2019. In practice, this means that it will e.g. output object rest/spread properties & async/await syntax instead of embedding a polyfill.

  • "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]

    This tells TypeScript that it's okay to use functions and properties introduced in ES2019 or earlier. In practice, this means that you can use e.g. String.prototype.trimStart and Array.prototype.flat.

    In addition to ES2019, Node.js 12 also supports BigInt & matchAll from ES2020, therefor we include the additional definitions from ES2020.

The full config would thus be:

{   "compilerOptions": {     "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"],     "module": "commonjs",     "target": "es2019"   } } 

If you are targeting Node.js 12.9.0 or newer, you can simply specify "lib": ["es2020"] as that version supports all new functions and properties introduced in ES2020. It doesn't support the new JavaScript syntax though, so you still have to stay on "target": "es2019".

The full config would thus be:

{   "compilerOptions": {     "lib": ["es2020"],     "module": "commonjs",     "target": "es2019"   } } 

If you are running Node.js 16 you can see my similar answer for Node.js 16 here

If you are running Node.js 14 you can see my similar answer for Node.js 14 here

If you are running Node.js 10 you can see my similar answer for Node.js 10 here

If you are running Node.js 8 you can see my similar answer for Node.js 8 here

like image 102
Linus Unnebäck Avatar answered Sep 23 '22 20:09

Linus Unnebäck