https://github.com/fastify/tsconfig
Shared TypeScript configuration for fastify projects
https://github.com/fastify/tsconfig
Last synced: 11 months ago
JSON representation
Shared TypeScript configuration for fastify projects
- Host: GitHub
- URL: https://github.com/fastify/tsconfig
- Owner: fastify
- License: mit
- Created: 2020-09-23T10:09:33.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2025-02-03T09:53:22.000Z (about 1 year ago)
- Last Synced: 2025-03-31T12:08:29.024Z (12 months ago)
- Homepage: https://npmjs.com/package/fastify-tsconfig
- Size: 13.7 KB
- Stars: 23
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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)