Перейти к основному содержимому
Модуль 7 · Урок 2 из 214/14 в курсе~15 min
Уроки модуля (2/2)

Декларации и слияние

Файлы объявлений типов (с расширением .d.ts) используются в TypeScript для описания формы существующего кода JavaScript без реализации какой-либо реальной логики. Они содержат только определения типов, интерфейсы и сигнатуры функций.

Эти файлы необходимы при использовании сторонних библиотек, написанных на чистом JavaScript.


Слияние деклараций

Слияние объявлений — это поведение, при котором компилятор объединяет два или более отдельных объявлений, объявленных с одинаковым именем, в одно определение.

Самый распространенный случай — слияние интерфейсов:

TS
interface User {
  name: string;
}

interface User {
  age: number;
}

// The resulting User interface has both name and age properties!
const student: User = {
  name: 'Alice',
  age: 23,
};

Если свойства имеют одно и то же имя, они должны быть одного типа, иначе TypeScript сообщит об ошибке.


Изменение глобальных и внешних модулей

Мы можем использовать слияние объявлений для расширения интерфейсов, определенных в других модулях или в глобальной области видимости.

Например, если мы хотим добавить свойство к глобальному объекту window браузера:

TS
declare global {
  interface Window {
    analyticsToken: string;
  }
}

Используя declare global, мы сообщаем TypeScript, что внедряем новую подпись в существующий глобальный интерфейс Window.


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

Упражнение 1. Базовое объединение объявлений

Упражнение#ts.m7.l2.e1
Попыток: 0Загрузка…

В TypeScript автоматически объединяются интерфейсы с одинаковым именем в одной области. Объявите пользователя интерфейса с именем свойства: строка, затем во втором блоке объявите того же пользователя интерфейса, добавив свойство age: Number. Наконец, объявите постоянного пользователя типа User с соответствующими значениями.

Загрузка редактора…
Показать подсказку

Объявите интерфейс User дважды, вставив соответствующие свойства, а затем назначьте поля объекту пользователя.

Решение доступно после 3 попыток

Упражнение 2. Расширение интерфейса глобального окна

Упражнение#ts.m7.l2.e2
Попыток: 0Загрузка…

Представьте, что вы хотите расширить глобальный интерфейс Window, добавив настраиваемое свойство с именем config типа Record<string, string>. Напишите правильное объявление, используя Declare Global, чтобы объединить новое свойство с глобальным интерфейсом Window.

Загрузка редактора…
Показать подсказку

Используйте объявление global {interface Window { config: Record<string, string>; } }.

Решение доступно после 3 попыток