Рецепт є прикладом відповіді на 4 питання https://t.me/node_recipes/774
Команда
nest new project-name генерує некоректний файл tsconfig, налаштований для застарілої версії Node.js (16-ї). Проблему посилює використання в екосистемі Nest.js пакета ts-node, який застосовується, наприклад, у проєктах типу typeorm або nest-commander. Пакет ts-node вже понад рік не оновлювався і досі не підтримує TypeScript 5.0 — Supporting Multiple Configuration Files in extends. Це обмежує можливість застосовувати рекомендовані налаштування з tsconfig/bases за допомогою:{
"extends": ["@tsconfig/strictest/tsconfig", "@tsconfig/node22/tsconfig"]
}Приклад ts-config, що відповідає сьогоднішнім best practise:
{
"extends": "@tsconfig/strictest/tsconfig",
"compilerOptions": {
// @todo extend from @tsconfig/node22/tsconfig after ts-node support extends array
// start of @tsconfig/node22/tsconfig
"lib": ["es2023"],
"module": "node16",
"target": "es2022",
"moduleResolution": "node16",
// end of @tsconfig/node22/tsconfig
"allowJs": false,
"checkJs": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"baseUrl": "./",
"paths": {
"~/*": ["./src/*"]
}
},
"include": ["src/**/*", "tests/**/*"],
"ts-node": {
"require": ["tsconfig-paths/register"]
}
}UPDATE:
а чому не module: "nodenext" і target: "esnext"?
Бо https://github.com/tsconfig/bases/blob/main/bases/node22.json#L8 яке йде з https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping