_comuns/src/local/index.ts

38 lines
865 B
TypeScript

/**
* LocalStorage Tipado
* Lê ou grava um valor no localStorage, mantendo o tipo genérico <T>.
*/
export const localValor = <T>(
chave_: string | any,
valor?: T | null,
): T | null => {
const localStorage = globalThis.localStorage
if (typeof localStorage == "undefined") return null
const chave =
typeof chave_ === "string"
? chave_
: encodeURIComponent(JSON.stringify(chave_))
try {
// Grava valor se fornecido
if (valor !== undefined) {
localStorage.setItem(chave, JSON.stringify(valor))
}
// Lê valor
const v2 = localStorage.getItem(chave)
if (v2 === null) return null
try {
return JSON.parse(v2) as T
} catch {
// Caso o valor não seja JSON válido
return v2 as unknown as T
}
} catch {
// Em caso de erro de acesso ao localStorage
return null
}
}