Помогите поправить реализацию получения значения из LocalStorage

Моя цель сделать функцию, которая будет получать значение из localStorage и при этом иметь значение по умолчанию (если значения не нашло), моя реализация такова:

export function getLocalStorage<T>(key: string, defaultValue: null | any = null): T | null
{
    const store: string | null = localStorage.getItem(key);

    if (typeof store === "string")
    {
        return JSON.parse(store);
    }

    return defaultValue;
}

Я не могу понять, как можно типизировать возвращаемое значение в виде defaultValue.
Если я делаю так:

export function getLocalStorage<T, D = null>(key: string, defaultValue: D = null): T | D
{
    const store: string | null = localStorage.getItem(key);

    if (typeof store === "string")
    {
        return JSON.parse(store);
    }

    return defaultValue;
}

... то получаю ошибку на параметре defaultValue:

Тип "null" не может быть назначен для типа "D".
Возможно создание экземпляра "D" с произвольным типом, который может быть не связан с "null". ts(2322)


Ответы (1 шт):

Автор решения: Sergey Philippenko
export function getLocalStorage<T>(key: string, defaultValue: T | null = null): T | null {
  const store = localStorage.getItem(key);

  if (typeof store === 'string') {
    try {
      return JSON.parse(store) as T | null;
    } catch (e) {
      return null;
    }
  }

  return defaultValue;
}
→ Ссылка