Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

127
Views
El encasillado de mecanografiado falla en el tiempo de ejecución pero está bien durante la compilación

tengo una clase Typescript responsable de almacenar y recuperar cualquier objeto, su tipo y la fecha en que se almacenó el objeto en LocalStorage (código a continuación)

El problema es la propiedad "storageDate". Aunque durante el tiempo de compilación, TS menciona que el tipo es "Fecha", pero en tiempo de ejecución es una cadena. Por lo tanto, no puedo usar, por ejemplo, la función toDateString() en storageDate. ¿Alguna idea de por qué sucede esto y sugerencias sobre cómo escribirlo?

//Clase

 export interface ILocalStorageReturnValue<T>{ storageDate:Date; storedObj:T } export class LocalStorage<T> implements ILocalStorage<T> { constructor(){ if( !window.localStorage) throw new Error(`[${constants.FrameWorkName}.LocalStorage]:${strings.ErrBrowserNoLclStrg}`) } public setItem(key: string, val: T): void{ if(!key || !val ) throw new Error(`[${constants.FrameWorkName}.LocalStorage.setItem]:${strings.ErrMissingKeyValProp}`) const newObj:ILocalStorageReturnValue<T> = { storedObj: val, storageDate: new Date() } window.localStorage.setItem(key ,JSON.stringify(newObj)) } public getItem(key: string): ILocalStorageReturnValue<T> | null{ return JSON.parse( window.localStorage.getItem(key)) ? <ILocalStorageReturnValue<T>>JSON.parse( window.localStorage.getItem(key)):null } }

// acceso

 const ls = new LocalStorage<IImage>().getItem(constants.localStorageKey) ls.storageDate().toDateString() --> throws an error saying toDateString is not a function .
about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

El problema es que su código no garantiza que la forma del objeto sea correcta cuando lo recupera del almacenamiento local. JSON no tiene ningún concepto de fechas, pero está devolviendo el resultado de JSON.parse (sin ninguna función de recuperación) y le dice a TypeScript que es un ILocalStorageReturnValue<T> . Pero no es uno, porque la fecha de storageDate ILocalStorageReturnValue una Date , y JSON.parse (sin una función de reactivación) nunca creará una Date . Tienes que hacer eso en tu código. La afirmación de tipo¹ es incorrecta, pero TypeScript confía en lo que le dices.

Dado que confía en el manejo predeterminado de fechas cuando almacena el elemento, la cadena storageDate en el almacenamiento local será compatible con new Date , por lo que podría hacer esto:

 public getItem(key: string): ILocalStorageReturnValue<T> | null { const str = window.localStorage.getItem(key); if (!str) { return null; } const result = JSON.parse(str); result.storageDate = new Date(result.storageDate); return result; }

Enlace del patio de recreo


¹ Tenga en cuenta que TypeScript no tiene conversión , tiene aserciones de tipo. Una aserción de tipo es puramente una cosa en tiempo de compilación. Es usted quien le dice a TypeScript el tipo de algo que tal vez no pueda descifrar. Las aserciones de tipo no tienen ningún efecto en tiempo de ejecución.

about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!