Index Signatures

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

Иногда мы заранее не знаем точные имена свойств объекта, но знаем типы его ключей и значений. Для таких случаев в TypeScript используются Index Signatures (сигнатуры индекса).

Синтаксис выглядит так: [key: type]: type. Это позволяет описывать объекты, работающие как словари или справочники.

Пример:

interface StringArray {
[index: number]: string;
}
// Описывает массив или объект, где ключи - числа, а значения - строки

Важно помнить, что если у интерфейса есть Index Signature, то все явно указанные свойства должны соответствовать этому типу. Этот урок поможет вам типизировать динамические объекты.

Список тем

1. Синтаксис сигнатуры

id: 40648_indexsig_01_replace

Дан интерфейс Dictionary, который должен описывать словарь, где ключи — строки, а значения — числа. Заполните пропуски в сигнатуре индекса так, чтобы интерфейс соответствовал описанию. Используйте общепринятое имя параметра для ключа.

Заполните пропуски
interface Dictionary {
  [input1S: input2S]: input3S;
}

const myDict: Dictionary = { "score": 100 };
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Доступ к свойству

id: 40648_indexsig_02_predict_result

Проанализируйте код на TypeScript, содержащий объект с индексной сигнатурой. Определите, что будет возвращено при попытке получить значение по ключу 'city'. Обратите внимание на типизацию объекта и возможные значения.

Выберите правильный вариант ответа
interface UserData {
    [key: string]: string | number | undefined;
}

const user: UserData = {
    name: "Alex",
    age: 28,
    email: "alex@example.com"
};

const cityValue = user["city"];
console.log(cityValue);
Сообщения
Проверить
Показать подсказку

3. Найти сигнатуру

id: 40648_indexsig_03_click_target

Внимательно изучите представленный интерфейс TypeScript. Ваша задача — найти и выделить строку, которая является сигнатурой индекса (index signature). Сигнатура индекса позволяет интерфейсу иметь динамические свойства с определёнными типами ключей и значений. Не выделяйте обычные поля интерфейса, методы или другие конструкции.

Кликните по всем фрагментам, которые подходят под условие задания.
interface UserPreferences {
  {{theme: string;~|~t1}}
  {{language: string;~|~t2}}
  {{notificationsEnabled: boolean;~|~t3}}
  {{updateSetting(key: string, value: any): void;~|~t4}}
  {{[key: string]: any;~|~t5}}
  {{getPreference(key: string): any;~|~t6}}
}
Сообщения
Проверить
Показать подсказку

4. Несоответствие типа

id: 40648_indexsig_04_error

В данном фрагменте кода TypeScript определён интерфейс с индексной сигнатурой, который требует, чтобы все значения свойств объекта были строками. Однако в объекте, который должен соответствовать этому интерфейсу, одно из свойств задано числом. Найдите и исправьте это значение, чтобы объект соответствовал интерфейсу и код мог быть корректно скомпилирован.

Найдите ошибку и исправьте
interface StringDictionary {
  [key: string]: string;
}
 
const myDict: StringDictionary = {
  name: "John",
  age: 30,
  city: "New York"
};
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Словарь зарплат

id: 40648_indexsig_05_build_from_parts

Из предложенных строк соберите корректное объявление интерфейса SalaryMap на TypeScript, который использует индексную сигнатуру для отображения имени сотрудника (строка) на его зарплату (число). Игнорируйте лишние строки, которые не относятся к объявлению этого интерфейса. В решении должны быть только строки, необходимые для объявления интерфейса с индексной сигнатурой.

Перетяните в правильном порядке строки из одного блока в другой
interface SalaryMap {
    [employeeName: string]: number;
}
type SalaryRecord = { [name: string]: number };
interface Employee {
    name: string;
    salary: number;
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Заполнение словаря

id: 40648_indexsig_06_analyze

Проанализируйте TypeScript-код сверху и восстановите последовательность логических шагов выполнения программы. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить, как программа создает объект с индексной сигнатурой, заполняет его в цикле и выводит результат.

interface StringDictionary {
  [key: string]: string;
}

const dict: StringDictionary = {};
const keys = ['id', 'name', 'role'];
const values = ['001', 'Alice', 'Admin'];

for (let i = 0; i < keys.length; i++) {
  dict[keys[i]] = values[i];
}

console.log(dict);
Расположите элементы в логичном порядке
Создание пустого объекта dict типа StringDictionary
Вывод содержимого объекта dict в консоль
Запуск цикла for, который выполняется для каждого индекса от 0 до 2
Завершение цикла после трёх итераций
Инициализация массива keys тремя строковыми ключами
Объявление интерфейса StringDictionary с индексной сигнатурой [key: string]: string
Внутри цикла: добавление в объект dict пары ключ-значение (ключ из keys[i], значение из values[i])
Инициализация массива values тремя строковыми значениями
Сообщения
Проверить
Показать подсказку

7. Количество ключей

id: 40648_indexsig_07_give_result

В данном задании представлен фрагмент кода на TypeScript, в котором создаётся объект с индексной сигнатурой и добавляются новые свойства различными способами. Проанализируйте код и определите, сколько свойств (ключей) будет содержаться в объекте после выполнения всех операций. Введите одно целое число в поле ответа.

Что должно получиться?
interface DynamicObject {
    [key: string]: number;
}

const obj: DynamicObject = { x: 10, y: 20 };
obj.z = 30;
obj['value'] = 40;
const dynamicKey = 'id';
obj[dynamicKey] = 50;
obj['x'] = 15; // Перезапись существующего ключа
console.log(Object.keys(obj).length);
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40648_compiler

Индексные сигнатуры (index signatures) в TypeScript позволяют описывать объекты, у которых ключи заранее неизвестны, но известен их тип и тип значений. В этом примере ты увидишь, как создать «словарь» с динамическими ключами, как TypeScript проверяет корректность доступа к свойствам и что происходит, если нарушить правила. Экспериментируй: меняй типы ключей и значений, добавляй новые свойства, попробуй присвоить неверные данные — посмотри, какие ошибки выдаст компилятор, и как их исправить!

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру