Можно ли настроить ts.config на компиляцию как require(), так и ESM импорты?

Да, в TypeScript вы можете настроить компиляцию для поддержки как require(), так и ESM (ES modules) импортов. Для этого вам понадобится изменить настройки в файле tsconfig.json и использовать соответствующие опции компиляции.

Вот несколько шагов, которые вы можете выполнить для настройки tsconfig.json на компиляцию require() и ESM импортов:

  1. Откройте файл tsconfig.json, который находится в корневой папке вашего проекта.
  1. Найдите опцию "module" и установите её значение в "commonjs" для поддержки require() импортов:
{
  "compilerOptions": {
    "module": "commonjs",
    // ...
  },
  // ...
}
  1. Найдите опцию "esModuleInterop" и установите её значение в true. Это позволит вам использовать ESM импорты в коде, даже если вы компилируете его в commonjs модули:
{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    // ...
  },
  // ...
}
  1. Если у вас есть файлы, которые вы хотите импортировать с помощью ESM, вы можете использовать расширение ".mjs" для этих файлов. Например, файл "example.mjs":
// example.mjs
export const exampleFunc = () => {
  // ...
};
  1. Вы можете использовать синтаксис ESM для импорта файла в своём коде:
// index.ts
import { exampleFunc } from './example.mjs';
  1. Дополнительно, если вы хотите использовать ESM импорты вместо require() в файлах с расширением ".ts" или ".js", вам придется установить пакет "esm" и использовать его для запуска вашего кода.
  • Установите пакет "esm" с помощью npm или yarn:
   npm install esm
  • Затем, запустите свою программу с помощью команды "node -r esm index.ts", где "index.ts" - ваш файл с кодом.

Это основные шаги, которые вы можете выполнить для настройки tsconfig.json на компиляцию как require(), так и ESM импортов в TypeScript и Node.js. Следуя этим шагам, вы сможете использовать оба синтаксиса импорта в вашем коде и переключаться между ними по необходимости.