38 lines
865 B
TypeScript
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
|
|
}
|
|
}
|