Выбор ответа Senior tsconfig и декларации обновлено

Что запрещает isolatedModules

Вопрос

Какой код не скомпилируется с isolatedModules: true, если User это интерфейс?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: export { User } from './types'. esbuild, SWC и Babel транспилируют каждый файл отдельно и не знают, что User это тип.

Варианты ответа

  1. import type { User } from './types'
  2. export { User } from './types'правильный ответ
  3. export type { User } from './types'
  4. enum Role { Admin, User }

Разбор

esbuild, SWC и Babel транспилируют каждый файл отдельно и не знают, что User это тип. Встретив export { User } from './types', они оставят реэкспорт, а в JS такого значения нет. Поэтому isolatedModules требует явный export type.

import type и export type как раз решают эту проблему. Обычный enum компилируется пофайлово и разрешён. Запрещено обращаться к declare const enum из других файлов, но это другой случай.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме