Tengo una función de constructor JS escrita en Typescript y accedo a esta función de constructor desde otro código como este
const ls = new LocalStorage<ICountryHolidayData>() let strdVal = ls.getItem(constants.localStorageKey).storedValueAunque el código funciona bien, no obtengo ninguna inteligencia... ni para ls.getItem ni para la propiedad storedValue.
Creo que es porque las funciones del constructor no pueden heredar la interfaz como lo hacen las clases en mecanografiado. De lo contrario, ¿alguien puede ayudarme a entender cómo hacer esto, de modo que pueda obtener intellisense para ambos valores? PD: sé que la forma más fácil es usar clases, pero tengo curiosidad sobre cómo hacerlo a través de funciones de constructor
export interface ILocalStorgaeReturnValue<Type>{ storedValue: Type, date: Date } export interface ILocalStorage<Type extends {}>{ setItem(key:string,value:Type):void; getItem(key:string):ILocalStorgaeReturnValue<Type>; removeItem(key:string ):void; //clear(); } export function LocalStorage<Type>(){ if( !window.localStorage) throw new Error(`Browser does not support local storage`) this.setItem = (key:string, val:Type ) =>{ if(!key || !val ) throw new Error(`key or value can not be null `) const completeObj = { storedValue: { ...val }, date:new Date() } window.localStorage.setItem(key ,JSON.stringify(completeObj)) }, this.getItem = (key:string):ILocalStorgaeReturnValue<Type> =>{ if(!key ) throw new Error(`[key can not be null `) const val= JSON.parse(window.localStorage.getItem(key)) if(!val || Object.keys(val).length<2) return null else return <ILocalStorgaeReturnValue<Type>> { ...val } }, this.removeItem = (key:string) =>{ if(!key ) throw new Error(`Key is empty`) window.localStorage.removeItem(key) } }