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

declare global в файле без export

Вопрос

Файл global.d.ts содержит только этот код и даёт ошибку. Как исправить?

declare global {
  interface Window {
    ym?: (...args: unknown[]) => void;
  }
}

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

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

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

Коротко

Правильный ответ: Добавить в файл export {}, чтобы он стал модулем. declare global разрешён только внутри модуля, а файл без import и export считается скриптом, где всё и так глобальное.

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

  1. Добавить в файл export {}, чтобы он стал модулемправильный ответ
  2. Заменить interface Window на type Window с пересечением
  3. Добавить declare перед interface внутри блока declare global
  4. Переименовать файл в global.ts, чтобы он попал в компиляцию

Разбор

declare global разрешён только внутри модуля, а файл без import и export считается скриптом, где всё и так глобальное. Пустой export {} превращает файл в модуль, и блок declare global начинает работать.

Другой рабочий вариант убрать обёртку declare global и оставить interface Window на верхнем уровне скрипта. Переименование в .ts не меняет правило. type не сливается с существующим Window. declare перед интерфейсом ничего не меняет.

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

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

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