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

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

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

1. Откройте файл tsconfig.json, который находится в корневой папке вашего проекта.

2. Найдите опцию "module" и установите её значение в "commonjs" для поддержки require() импортов:

{
  "compilerOptions": {
    "module": "commonjs",
    // ...
  },
  // ...
}

3. Найдите опцию "esModuleInterop" и установите её значение в true. Это позволит вам использовать ESM импорты в коде, даже если вы компилируете его в commonjs модули:

{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    // ...
  },
  // ...
}

4. Если у вас есть файлы, которые вы хотите импортировать с помощью ESM, вы можете использовать расширение ".mjs" для этих файлов. Например, файл "example.mjs":

// example.mjs
export const exampleFunc = () => {
  // ...
};

5. Вы можете использовать синтаксис ESM для импорта файла в своём коде:

// index.ts
import { exampleFunc } from './example.mjs';

6. Дополнительно, если вы хотите использовать 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. Следуя этим шагам, вы сможете использовать оба синтаксиса импорта в вашем коде и переключаться между ними по необходимости.