UNPKG

fastify-tsconfig

Version:

Shared TypeScript configuration

144 lines (121 loc) 3.82 kB
# tsconfig > Shared [TypeScript configuration](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) for fastify projects ## Install ``` $ npm i -D fastify-tsconfig ``` ## Usage Create your own `tsconfig.json` in the projects' root folder and extend it from `fastify-tsconfig`, overriding or adding the desired settings. By default, no `outDir` is set (because of [this issue](https://github.com/Microsoft/TypeScript/issues/29172)), so be sure to add one. ### Configuration module and moduleResolution This configuration sets `"module"` and `"moduleResolution"` to [`NodeNext`](https://www.typescriptlang.org/docs/handbook/esm-node.html). This means that TypeScript will read the nearest `package.json` file in the scope and search for the `"type"` field or the absence of it. If `type` is not set or is `"type": "commonjs"` the emitted code will be CommonJS, with `.js` extension. Moreover, `tsc` will complain if ESM-only properties/features are used in source files. If you want to emit `.mjs` files, use the `.mts` extension. On the other hand, if `"type": "module"` is set, the sources will be compiled to the ESM with the `.js` extension. In this case, if you want to emit `.cjs` files, use the `.cts` extension for the source file. The "following the Node.js rules" goes also for the `package.json` `exports` field. If `type` is set, regardless of the value, TypeScript will check the `exports` field to know where the compiled code and the types are located. If the `type` field is not set, it will check for the `main` and `types` fields. #### CommonJS example `package.json` ```jsonc { "name": "my-package", "type": "commonjs", "main": "dist/index.js", // this is for older Node.js versions "types": "dist/index.d.ts", // this is optional and can be omitted "exports": { "import": "./dist/index.js", "require": "./dist/index.js", "types": "./dist/index.d.ts" // this is optional and can be omitted } } ``` `tsconfig.json` ```jsonc { "extends": "fastify-tsconfig", "compilerOptions": { "outDir": "dist", "sourceMap": true }, "include": [ "src/**/*.ts" ] } ``` #### ESM example `package.json` ```jsonc { "name": "my-package", "type": "module", "main": "dist/index.js", // this is for older Node.js versions "types": "dist/index.d.ts", // this is optional and can be omitted "exports": { "import": "./dist/index.js", "require": "./dist/index.js", "types": "./dist/index.d.ts" // this is optional and can be omitted } } ``` `tsconfig.json` ```jsonc { "extends": "fastify-tsconfig", "compilerOptions": { "outDir": "dist", "sourceMap": true }, "include": [ "src/**/*.ts" ] } ``` ### Extending this configuration Depending on the type of the project, you should add the following settings. #### Application `tsconfig.json` ```json { "extends": "fastify-tsconfig", "compilerOptions": { "outDir": "dist", "sourceMap": true }, "include": [ "src/**/*.ts" ] } ``` #### NPM Package `tsconfig.json` ```json { "extends": "fastify-tsconfig", "compilerOptions": { "outDir": "dist", "declaration": true }, "include": [ "src/**/*.ts" ] } ``` #### Monorepo Package `tsconfig.json` ```json { "extends": "fastify-tsconfig", "compilerOptions": { "outDir": "dist", "declarationMap": true, "composite": true }, "include": [ "src/**/*.ts" ] } ``` Check the other settings [here](./tsconfig.json) ## Configuration target The configuration targets ES2023, which is supported in Node.js 20 and later. However, using ES2023 as a target makes widely used features not being compiled. To target an older version, override the `target` property. ## License Licensed under [MIT](./LICENSE). --- Inspired by: [sindresorhus/tsconfig](https://github.com/sindresorhus/tsconfig)