Tengo un problema de mecanografiado:
let classStart: keyof typeof monday; const now = new Date(); console.log(now.getHours()); for (let i = Object.keys(monday).length - 1; i > 0; i--) { let time: any = Object.keys(monday)[i].split(":"); // eslint-disable-next-line eqeqeq if (time[0] == now.getHours()) { if (time[1] <= now.getMinutes()) { console.log(Object); classStart = Object.keys(monday)[i]; console.log(); } else { //classStart = Object.keys(monday)[i - 1]; console.log(Object.keys(monday)[i - 1]); } // console.log(monday[classStart]); } }Este es mi código, necesito usar Object.keys(monday)[i] (que es una cadena) como una propiedad para monday[].
Si uso let classStart: keyof typeof monday; Puedo asignar ex "7:25" a classStart pero no puedo asignarlo usando una función como Object.keys(monday)[i]; . ¿Por qué?
El JSON de donde obtengo los datos se ve así:
... "7:25": ["B1", "B2", "B3","B4"], ...Es un problema mecanografiado. estoy bastante seguro
Creo que el problema principal es que nadie puede adivinar cuál es el tipo de lunes (también TypeScript). Entonces, si especifica su tipo, el problema se volverá mucho más claro
Sospecho que
monday: { [HHMM:string]: string[] }Así que modifiqué ligeramente tu código.
const mondayInput = { "10:13": ["B1"], "7:25": ["B1", "B2", "B3","B4"] }; const monday = mondayInput as Record<string,string[]> //fixed date time for test proposes let now = new Date("2013/01/01 10:10:00") console.log(now, now.getHours(), now.getMinutes()); function HHMMtoInt(x:string){const [HH, MM] = x.split(":"); return parseInt(HH) * 100 + parseInt(MM)} const times = Object.keys(monday).sort((a,b) => HHMMtoInt(a)-HHMMtoInt(b)); for (let i = 0;i < times.length; i++) { const timeHHMM = times[i]; let time = timeHHMM.split(":").map(x => parseInt(x)); let timeInterval: number | undefined; console.log("Compare", time[0], time[1], now.getHours(), now.getMinutes()) if (time[0] == now.getHours()) { if (time[1] <= now.getMinutes()) { timeInterval = i; } else { timeInterval = i - 1; } } if(timeInterval !== undefined && timeInterval >= 0 ){ console.log("Time", times[timeInterval], "Classes", monday[times[timeInterval]] ); } }Enlace de juegos: proporcionado