Глобальні змінні середовища - process, Buffer, describe, it, expect - TypeScript знає не сам, а з пакетів типів: @types/node, @types/jest тощо. Опція types визначає, які з таких пакетів підключати глобально, без явного імпорту.
Що змінилося. До TypeScript 5.9 включно значення за замовчуванням було «усі пакети з node_modules/@types». У великих проєктах це сотні пакетів, підтягнутих транзитивно, - повільна перевірка й випадкові глобальні типи.
З TypeScript 6.0 (і в 7.0) types за замовчуванням - порожній список []. Після оновлення проєкт, що покладався на автоматичне підключення, бачить:
error TS2591: Cannot find name 'process'. Do you need to install type definitions for node?
Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.
Рішення - перелічити потрібні пакети явно:
{
"compilerOptions": {
"types": ["node", "vite/client"]
}
}
node- для коду, що працює в Node.js (конфіги, скрипти, SSR);vite/client- типиimport.meta.env,import.meta.hotі імпорту ресурсів (.svg,.css) у Vite-застосунку;vitest/globals- якщо тести використовують глобальніdescribe/it.
Повернути стару поведінку можна значенням ["*"], але документація TypeScript радить явний список: за їхніми даними, багато проєктів пришвидшили збірку на 20-50% лише завдяки цьому.
Що варто знати:
typesстосується лише глобальних оголошень. Пакети, які ви імпортуєте (import express from 'express'), підключаються через імпорт і не потребують запису вtypes;- різні частини проєкту - різні глобальні типи: код браузера не повинен бачити
process, а конфіги Vite -document. Тому шаблони Vite мають два конфіги (tsconfig.app.jsonіtsconfig.node.json) з різнимиtypesіlib; - пакет має бути встановлений: запис у
typesбез@types/nodeуdevDependenciesдасть помилку «Cannot find type definition file».