Типизация localStorage

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

Тренажер по TypeScript

Работа с localStorage в TypeScript требует особого внимания, так как этот API браузера хранит только строки. Методы getItem возвращают string | null, а при сохранении объектов их нужно сериализовать.

Для удобной работы часто создают типизированные обертки (wrappers). Основные шаги:

  • Получение строки по ключу.
  • Проверка на null.
  • Парсинг через JSON.parse().
  • Приведение результата к нужному дженерик-типу.

В этом практическом уроке мы напишем безопасную абстракцию для работы с хранилищем браузера.

Список тем

1. Чтение из хранилища

id: 40775_ls_01_get

В этом задании вам нужно прочитать данные из localStorage. Заполните пропуски, чтобы получить значение по ключу 'username' из хранилища браузера. Используйте правильный метод localStorage и укажите ключ в кавычках.

Заполните пропуски
// Чтение значения из localStorage по ключу
const username = localStorage.input1S(input2S);
console.log(`Имя пользователя: ${username}`);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Парсинг JSON

id: 40775_ls_02_parse

В этом задании вам предстоит дополнить код, который получает строку из localStorage, проверяет её на null и парсит JSON. В коде есть два пропуска, которые нужно заполнить, выбрав подходящие варианты из выпадающего списка. Обратите внимание на правильную последовательность проверки и вызова JSON.parse.

Нужно правильно расставить в пропуски предложенные варианты
const jsonString: string | null = localStorage.getItem('data');
if (input1S) {
  const data = input2S;
  console.log(data);
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Забытая сериализация

id: 40775_ls_03_error

В этом фрагменте TypeScript-кода допущена ошибка при сохранении объекта в localStorage. Вместо сериализации объекта с помощью JSON.stringify, объект сохраняется напрямую, что приводит к некорректному значению '[object Object]'. Исправьте строку с ошибкой, чтобы объект корректно сохранялся в localStorage.

Найдите ошибку и исправьте
const user = { name: 'Alice', age: 25 };
localStorage.setItem('user', user);
const savedUser = localStorage.getItem('user');
console.log(savedUser);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Функция load

id: 40775_ls_04_build

Из предложенных строк соберите корректную TypeScript-функцию `load`, которая является дженерик-функцией для загрузки данных из localStorage по ключу. Функция должна получать значение, проверять его на null, парсить JSON и возвращать данные с типом T или null при отсутствии. Игнорируйте лишние строки, которые не входят в решение.

Перетяните в правильном порядке строки из одного блока в другой
function load<T>(key: string): T | null {
  const data = localStorage.getItem(key);
  if (data === null) {
    return null;
  }
  return JSON.parse(data) as T;
}
  console.log(key);
  return data as T;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Возврат при отсутствии ключа

id: 40775_ls_05_predict

Проанализируйте код типизированной обертки для работы с localStorage и определите, что вернет функция getItem, если указанный ключ отсутствует в хранилище и не передано значение по умолчанию. Обратите внимание на возвращаемый тип функции и логику обработки отсутствующего значения.

Выберите правильный вариант ответа
function getItem<T>(key: string, defaultValue?: T): T | null {
    const item = localStorage.getItem(key);
    if (item !== null) {
        return JSON.parse(item) as T;
    }
    if (defaultValue !== undefined) {
        return defaultValue;
    }
    return null;
}

// Ключ 'theme' отсутствует в localStorage
const result = getItem<string>('theme');
console.log(result);
Сообщения
Проверить
Показать подсказку

6. Методы Storage

id: 40775_ls_06_compare

В этом задании вам нужно сопоставить методы объекта localStorage с их описаниями. В левой колонке представлены сигнатуры методов TypeScript для работы с Web Storage, а в правой — их краткие описания. Сопоставьте каждый метод с соответствующим описанием, перетащив элементы правой колонки к левым. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок описаний перемешан.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
setItem(key: string, value: string): void
getItem(key: string): string | null
removeItem(key: string): void
clear(): void
key(index: number): string | null
Удаляет пару ключ-значение по указанному ключу.
Очищает все данные из хранилища.
Сохраняет пару ключ-значение в хранилище.
Возвращает имя ключа по заданному индексу.
Возвращает значение по ключу или null, если ключ не найден.
Сообщения
Проверить
Показать подсказку

7. Логика сохранения

id: 40775_ls_07_analyze

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

interface UserData {
  id: number;
  name: string;
  email: string;
}

function saveToStorage(key: string, data: UserData): void {
  try {
    // Валидация
    if (!data.id || !data.name || !data.email) {
      throw new Error('Invalid data: missing required fields');
    }

    // Сериализация
    const serialized = JSON.stringify(data);

    // Запись
    localStorage.setItem(key, serialized);
    console.log('Data saved successfully');
  } catch (error) {
    console.error('Save failed:', error.message);
  }
}

// Входные данные
const user: UserData = {
  id: 1,
  name: 'Alice',
  email: 'alice@example.com'
};

saveToStorage('user', user);
Расположите элементы в логичном порядке
Задаются входные данные: объект user с полями id, name, email
В консоль выводится сообщение об успешном сохранении
Происходит валидация: проверка наличия обязательных полей (id, name, email)
Если на любом этапе возникает ошибка, выполнение переходит в блок catch и выводится сообщение об ошибке
Если валидация успешна, объект сериализуется в строку JSON с помощью JSON.stringify
Вызывается функция saveToStorage с ключом 'user' и объектом user
Сериализованная строка записывается в localStorage под ключом 'user'
Внутри функции начинается выполнение блока try
Сообщения
Проверить
Показать подсказку

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

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