Библиотека Idb-keyval предоставляет простой интерфейс для работы с IndexedDB через абстракцию ключ–значение. Правильный выбор типов ключей является критически важным для корректного хранения и извлечения данных. В IndexedDB ключи должны соответствовать определённым требованиям, и Idb-keyval наследует эти ограничения, одновременно упрощая работу с ними.
В Idb-keyval ключи могут быть следующих типов:
Строки (string) Наиболее
универсальный тип ключа. Строки могут содержать любые символы, включая
пробелы, Unicode и специальные символы. Например:
import { set, get } from 'idb-keyval';
await set('user:name', 'Иван');
const name = await get('user:name');
console.log(name); // 'Иван'
Особенности:
: или .)
для логической группировки данных.Числа (number) Целые числа и числа
с плавающей точкой. Они подходят для индексированных коллекций или
порядковых идентификаторов:
await set(1, { score: 100 });
const score = await get(1);
console.log(score); // { score: 100 }
Особенности:
Дата (Date) Можно использовать
объекты Date в качестве ключей. Библиотека автоматически
преобразует их в числовое представление (getTime()),
совместимое с IndexedDB:
const today = new Date();
await set(today, 'Событие сегодня');
const event = await get(today);
console.log(event); // 'Событие сегодня'
Особенности:
Массивы (Array) Композитные ключи
поддерживают массивы, содержащие строки, числа или даты. Используются
для составных идентификаторов:
await set(['user', 42], 'Пользователь 42');
const user = await get(['user', 42]);
console.log(user); // 'Пользователь 42'
Особенности:
Idb-keyval не поддерживает следующие типы в качестве ключей:
{}) и функцииundefinedSymbolnull допускается только как значение, но не как
ключИспользование недопустимых типов приводит к исключениям на этапе выполнения, так как IndexedDB накладывает строгие ограничения на ключи.
Date удобны для журналов событий и истории изменений.Комбинированные ключи позволяют строить более сложные структуры:
// Ключ: [тип объекта, id, дата]
const key = ['order', 123, new Date('2026-03-24')];
await set(key, { amount: 2500, status: 'pending' });
const order = await get(key);
console.log(order); // { amount: 2500, status: 'pending' }
Такой подход обеспечивает уникальность записи и упрощает фильтрацию по компонентам ключа, например, по типу объекта или дате создания.
'User' и
'user' будут восприниматься как разные ключи.DOMException: The provided value is not a valid key.Idb-keyval предоставляет гибкость в выборе типов ключей, позволяя использовать строки, числа, даты и массивы для создания как простых, так и сложных схем хранения данных. Правильная организация ключей обеспечивает стабильность, предсказуемость и удобство работы с IndexedDB через эту библиотеку.