Estoy tratando de crear e inicializar un objeto con claves conocidas, sin embargo, el objeto vacío inicial {} que necesito rompe mi escritura.
Tengo una lista de valores que quiero usar como claves y quiero inicializar un objeto con esas claves. En python haría algo como:
myDict = {key: value for (key, value) in zip(myKeys, [[]]*len(myKeys))} Esto debería darle a myDict el tipo Record<myKeys, string[]>
En TS, parece que no puedo tener la misma suerte, ya que necesito inicializar el objeto en una lista vacía antes de poder llenarlo con mis claves/valores. Preferiría no tener que llamarlo parcial y luego forzarlo al tipo correcto.
Yo he tratado:
const allPlanFeatures: Partial<Record<ExtensivePlanHandle, string[]>> = {}; for (const planId of extensivePlanList) { const features = getFeaturesForPlan(planHandleToMonthly[planId], is4kEnabled, exportFlow); allPlanFeatures[planId] = features; } return allPlanFeatures as Record<ExtensivePlanHandle, string[]>;y
const allPlanFeatures: Partial<Record<ExtensivePlanHandle, string[]>> = extensivePlanList.reduce( (a, planHandle) => ({ ...a, [planHandle]: getFeaturesForPlan( planHandleToMonthly[planHandle], is4kEnabled, exportFlow ), }), {} ); return allPlanFeatures as Record<ExtensivePlanHandle, string[]>;Estos terminan con el efecto deseado al final del día, pero preferiría no tener este medio que funcione parcialmente.
Puedes probar esto:
const allPlanFeatures: Record<ExtensivePlanHandle, string[]> = {} as Record<ExtensivePlanHandle, string[]>;esto no es perfecto, pero a veces necesita decirle al compilador TypeScript qué es lo correcto.