What is the optimal TypeScript tsconfig
settings for outputting code that's going to be run on Node.js 12?
ts-node supports a variety of options which can be specified via tsconfig.
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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With