[{"data":1,"prerenderedAt":5346},["ShallowReactive",2],{"navigation-en":3,"content-urls":13,"pagesContext-en-2":224,"pagesContext-en-3":251,"authorsContext-en-jeroenbach":271,"postsContext-en-5-undefined":288},[4,7,10],{"label":5,"to":6},"Blog","\u002Fposts",{"label":8,"to":9},"Portfolio","\u002Fcontent\u002F20-portfolio",{"label":11,"to":12},"About","\u002Fcontent\u002F30-about",{"page":14,"blogPost":101,"blog":223},{"1":15,"10":37,"20":51,"30":65,"404":82},{"en":16,"fr":25,"nl":28,"de":31,"es":34},{"title":17,"path":18,"stem":19,"contentId":20,"url":21,"dateModified":22,"locale":23,"type":24},"Home","\u002Fcontent\u002Fhome","content\u002F1.home",1,"","2025-11-02T18:00:00","en","page",{"title":17,"path":18,"stem":19,"contentId":20,"url":26,"dateModified":22,"locale":27,"type":24},"\u002Ffr","fr",{"title":17,"path":18,"stem":19,"contentId":20,"url":29,"dateModified":22,"locale":30,"type":24},"\u002Fnl","nl",{"title":17,"path":18,"stem":19,"contentId":20,"url":32,"dateModified":22,"locale":33,"type":24},"\u002Fde","de",{"title":17,"path":18,"stem":19,"contentId":20,"url":35,"dateModified":22,"locale":36,"type":24},"\u002Fes","es",{"en":38,"fr":43,"nl":45,"de":47,"es":49},{"title":5,"path":39,"stem":40,"contentId":41,"url":6,"dateModified":42,"locale":23,"type":24},"\u002Fcontent\u002Fposts","content\u002F10.posts",10,"2025-10-26T18:00:00",{"title":5,"path":39,"stem":40,"contentId":41,"url":44,"dateModified":42,"locale":27,"type":24},"\u002Ffr\u002Farticles",{"title":5,"path":39,"stem":40,"contentId":41,"url":46,"dateModified":42,"locale":30,"type":24},"\u002Fnl\u002Fposts",{"title":5,"path":39,"stem":40,"contentId":41,"url":48,"dateModified":42,"locale":33,"type":24},"\u002Fde\u002Fposts",{"title":5,"path":39,"stem":40,"contentId":41,"url":50,"dateModified":42,"locale":36,"type":24},"\u002Fes\u002Farticulos",{"en":52,"fr":56,"nl":58,"de":60,"es":62},{"title":8,"path":53,"stem":54,"contentId":55,"url":9,"dateModified":42,"locale":23,"type":24},"\u002Fcontent\u002Fportfolio","content\u002F20.portfolio",20,{"title":8,"path":53,"stem":54,"contentId":55,"url":57,"dateModified":42,"locale":27,"type":24},"\u002Ffr\u002Fcontent\u002F20-portfolio",{"title":8,"path":53,"stem":54,"contentId":55,"url":59,"dateModified":42,"locale":30,"type":24},"\u002Fnl\u002Fcontent\u002F20-portfolio",{"title":8,"path":53,"stem":54,"contentId":55,"url":61,"dateModified":42,"locale":33,"type":24},"\u002Fde\u002Fcontent\u002F20-portfolio",{"title":63,"path":53,"stem":54,"contentId":55,"url":64,"dateModified":42,"locale":36,"type":24},"Portafolio","\u002Fes\u002Fcontent\u002F20-portafolio",{"en":66,"fr":70,"nl":73,"de":76,"es":79},{"title":11,"path":67,"stem":68,"contentId":69,"url":12,"dateModified":42,"locale":23,"type":24},"\u002Fcontent\u002Fabout","content\u002F30.about",30,{"title":71,"path":67,"stem":68,"contentId":69,"url":72,"dateModified":42,"locale":27,"type":24},"À propos","\u002Ffr\u002Fcontent\u002F30-a-propos",{"title":74,"path":67,"stem":68,"contentId":69,"url":75,"dateModified":42,"locale":30,"type":24},"Over","\u002Fnl\u002Fcontent\u002F30-over",{"title":77,"path":67,"stem":68,"contentId":69,"url":78,"dateModified":42,"locale":33,"type":24},"Über mich","\u002Fde\u002Fcontent\u002F30-uber-mich",{"title":80,"path":67,"stem":68,"contentId":69,"url":81,"dateModified":42,"locale":36,"type":24},"Acerca de","\u002Fes\u002Fcontent\u002F30-acerca-de",{"en":83,"fr":89,"nl":92,"de":95,"es":98},{"title":84,"path":85,"stem":86,"contentId":87,"url":88,"dateModified":22,"locale":23,"type":24},"Page not found","\u002Fcontent\u002Fpage-not-found","content\u002F404.page-not-found",404,"\u002Fcontent\u002F404-page-not-found",{"title":90,"path":85,"stem":86,"contentId":87,"url":91,"dateModified":22,"locale":27,"type":24},"Page non trouvée","\u002Ffr\u002Fcontent\u002F404-page-non-trouvee",{"title":93,"path":85,"stem":86,"contentId":87,"url":94,"dateModified":22,"locale":30,"type":24},"Pagina niet gevonden","\u002Fnl\u002Fcontent\u002F404-pagina-niet-gevonden",{"title":96,"path":85,"stem":86,"contentId":87,"url":97,"dateModified":22,"locale":33,"type":24},"Seite nicht gefunden","\u002Fde\u002Fcontent\u002F404-seite-nicht-gefunden",{"title":99,"path":85,"stem":86,"contentId":87,"url":100,"dateModified":22,"locale":36,"type":24},"Página no encontrada","\u002Fes\u002Fcontent\u002F404-pagina-no-encontrada",{"1":102,"2":126,"3":150,"4":175,"5":199},{"en":103,"fr":110,"nl":115,"de":118,"es":121},{"title":104,"path":105,"stem":106,"contentId":20,"dateModified":107,"url":108,"locale":23,"type":109},"Mastering Conditional Property Types with Vue 3.3 Generics","\u002Fposts\u002F1","posts\u002F1","2025-05-27T11:30:00","\u002Fposts\u002F1-mastering-conditional-property-types-with-vue-3_3-generics","blogPost",{"title":111,"path":112,"stem":113,"contentId":20,"dateModified":107,"url":114,"locale":27,"type":109},"Maîtriser les types de propriétés conditionnelles avec les génériques de Vue 3.3","\u002Farticles\u002F1","articles\u002F1","\u002Ffr\u002Farticles\u002F1-maitriser-les-types-de-proprietes-conditionnelles-avec-les-generiques-de-vue-3_3",{"title":116,"path":105,"stem":106,"contentId":20,"dateModified":107,"url":117,"locale":30,"type":109},"Conditionele Property Types beheersen met Vue 3.3 Generics","\u002Fnl\u002Fposts\u002F1-conditionele-property-types-beheersen-met-vue-3_3-generics",{"title":119,"path":105,"stem":106,"contentId":20,"dateModified":107,"url":120,"locale":33,"type":109},"Bedingte Property-Typen mit Vue 3.3 Generics meistern","\u002Fde\u002Fposts\u002F1-bedingte-property-typen-mit-vue-3_3-generics-meistern",{"title":122,"path":123,"stem":124,"contentId":20,"dateModified":107,"url":125,"locale":36,"type":109},"Dominar los tipos de propiedades condicionales con genéricos de Vue 3.3","\u002Farticulos\u002F1","articulos\u002F1","\u002Fes\u002Farticulos\u002F1-dominar-los-tipos-de-propiedades-condicionales-con-genericos-de-vue-3_3",{"en":127,"fr":134,"nl":139,"de":142,"es":145},{"title":128,"path":129,"stem":130,"contentId":131,"dateModified":132,"url":133,"locale":23,"type":109},"Ditching the Cookie Banners: Run Plausible Analytics on Azure Kubernetes","\u002Fposts\u002F2","posts\u002F2",2,"2025-10-04T13:00:00","\u002Fposts\u002F2-ditching-the-cookie-banners:-run-plausible-analytics-on-azure-kubernetes",{"title":135,"path":136,"stem":137,"contentId":131,"dateModified":132,"url":138,"locale":27,"type":109},"Éliminer les bannières de cookies: Exécutez Plausible Analytics sur Azure Kubernetes","\u002Farticles\u002F2","articles\u002F2","\u002Ffr\u002Farticles\u002F2-eliminer-les-bannieres-de-cookies:-executez-plausible-analytics-sur-azure-kubernetes",{"title":140,"path":129,"stem":130,"contentId":131,"dateModified":132,"url":141,"locale":30,"type":109},"Afscheid van Cookie Banners: Draai Plausible Analytics op Azure Kubernetes","\u002Fnl\u002Fposts\u002F2-afscheid-van-cookie-banners:-draai-plausible-analytics-op-azure-kubernetes",{"title":143,"path":129,"stem":130,"contentId":131,"dateModified":132,"url":144,"locale":33,"type":109},"Abschied von Cookie-Bannern: Plausible Analytics auf Azure Kubernetes betreiben","\u002Fde\u002Fposts\u002F2-abschied-von-cookie-bannern:-plausible-analytics-auf-azure-kubernetes-betreiben",{"title":146,"path":147,"stem":148,"contentId":131,"dateModified":132,"url":149,"locale":36,"type":109},"Eliminar los banners de cookies: Ejecuta Plausible Analytics en Azure Kubernetes","\u002Farticulos\u002F2","articulos\u002F2","\u002Fes\u002Farticulos\u002F2-eliminar-los-banners-de-cookies:-ejecuta-plausible-analytics-en-azure-kubernetes",{"en":151,"fr":158,"nl":164,"de":167,"es":170},{"title":152,"path":153,"stem":154,"contentId":155,"dateModified":156,"url":157,"locale":23,"type":109},"Track how many people read your articles, using Plausible.io, Vue.js and Azure functions","\u002Fposts\u002F3","posts\u002F3",3,"2025-08-03T15:45:00","\u002Fposts\u002F3-track-how-many-people-read-your-articles-using-plausible_io-vue_js-and-azure-functions",{"title":159,"path":160,"stem":161,"contentId":155,"dateModified":162,"url":163,"locale":27,"type":109},"Suivez combien de personnes lisent vos articles, en utilisant Plausible.io, Vue.js et Azure Functions","\u002Farticles\u002F3","articles\u002F3","2025-08-15:45:00","\u002Ffr\u002Farticles\u002F3-suivez-combien-de-personnes-lisent-vos-articles-en-utilisant-plausible_io-vue_js-et-azure-functions",{"title":165,"path":153,"stem":154,"contentId":155,"dateModified":156,"url":166,"locale":30,"type":109},"Volg hoeveel mensen je artikelen lezen, met Plausible.io, Vue.js en Azure functions","\u002Fnl\u002Fposts\u002F3-volg-hoeveel-mensen-je-artikelen-lezen-met-plausible_io-vue_js-en-azure-functions",{"title":168,"path":153,"stem":154,"contentId":155,"dateModified":156,"url":169,"locale":33,"type":109},"Verfolgen Sie, wie viele Menschen Ihre Artikel lesen, mit Plausible.io, Vue.js und Azure Functions","\u002Fde\u002Fposts\u002F3-verfolgen-sie-wie-viele-menschen-ihre-artikel-lesen-mit-plausible_io-vue_js-und-azure-functions",{"title":171,"path":172,"stem":173,"contentId":155,"dateModified":156,"url":174,"locale":36,"type":109},"Rastrea cuántas personas leen tus artículos, usando Plausible.io, Vue.js y funciones de Azure","\u002Farticulos\u002F3","articulos\u002F3","\u002Fes\u002Farticulos\u002F3-rastrea-cuantas-personas-leen-tus-articulos-usando-plausible_io-vue_js-y-funciones-de-azure",{"en":176,"fr":183,"nl":188,"de":191,"es":194},{"title":177,"path":178,"stem":179,"contentId":180,"dateModified":181,"url":182,"locale":23,"type":109},"Deploy a production-ready Kubernetes Cluster on Azure with Terraform","\u002Fposts\u002F4","posts\u002F4",4,"2025-12-06T21:00:00","\u002Fposts\u002F4-deploy-a-production-ready-kubernetes-cluster-on-azure-with-terraform",{"title":184,"path":185,"stem":186,"contentId":180,"dateModified":181,"url":187,"locale":27,"type":109},"Déployer un cluster Kubernetes prêt pour la production sur Azure avec Terraform","\u002Farticles\u002F4","articles\u002F4","\u002Ffr\u002Farticles\u002F4-deployer-un-cluster-kubernetes-pret-pour-la-production-sur-azure-avec-terraform",{"title":189,"path":178,"stem":179,"contentId":180,"dateModified":181,"url":190,"locale":30,"type":109},"Implementeer een productie-klaar Kubernetes Cluster op Azure met Terraform","\u002Fnl\u002Fposts\u002F4-implementeer-een-productie-klaar-kubernetes-cluster-op-azure-met-terraform",{"title":192,"path":178,"stem":179,"contentId":180,"dateModified":181,"url":193,"locale":33,"type":109},"Einen produktionsreifen Kubernetes-Cluster auf Azure mit Terraform bereitstellen","\u002Fde\u002Fposts\u002F4-einen-produktionsreifen-kubernetes-cluster-auf-azure-mit-terraform-bereitstellen",{"title":195,"path":196,"stem":197,"contentId":180,"dateModified":181,"url":198,"locale":36,"type":109},"Despliega un clúster de Kubernetes listo para producción en Azure con Terraform","\u002Farticulos\u002F4","articulos\u002F4","\u002Fes\u002Farticulos\u002F4-despliega-un-cluster-de-kubernetes-listo-para-produccion-en-azure-con-terraform",{"en":200,"fr":207,"nl":212,"de":215,"es":218},{"title":201,"path":202,"stem":203,"contentId":204,"dateModified":205,"url":206,"locale":23,"type":109},"Array to Map conversion in Typescript, with type safety","\u002Fposts\u002F5","posts\u002F5",5,"2025-09-29T21:00:00","\u002Fposts\u002F5-array-to-map-conversion-in-typescript-with-type-safety",{"title":208,"path":209,"stem":210,"contentId":204,"dateModified":205,"url":211,"locale":27,"type":109},"Conversion de tableau en Map en Typescript, avec sécurité des types","\u002Farticles\u002F5","articles\u002F5","\u002Ffr\u002Farticles\u002F5-conversion-de-tableau-en-map-en-typescript-avec-securite-des-types",{"title":213,"path":202,"stem":203,"contentId":204,"dateModified":205,"url":214,"locale":30,"type":109},"Array naar Map conversie in Typescript, met type veiligheid","\u002Fnl\u002Fposts\u002F5-array-naar-map-conversie-in-typescript-met-type-veiligheid",{"title":216,"path":202,"stem":203,"contentId":204,"dateModified":205,"url":217,"locale":33,"type":109},"Array zu Map Konvertierung in TypeScript, mit Typsicherheit","\u002Fde\u002Fposts\u002F5-array-zu-map-konvertierung-in-typescript-mit-typsicherheit",{"title":219,"path":220,"stem":221,"contentId":204,"dateModified":205,"url":222,"locale":36,"type":109},"Conversión de Array a Map en Typescript, con seguridad de tipos","\u002Farticulos\u002F5","articulos\u002F5","\u002Fes\u002Farticulos\u002F5-conversion-de-array-a-map-en-typescript-con-seguridad-de-tipos",{},{"id":225,"title":226,"body":227,"canonicalUrl":236,"company":236,"contentId":131,"dateModified":236,"datePublished":236,"description":233,"draft":237,"enableProse":237,"excludeFromNavigation":237,"extension":238,"imageAlt":236,"imageUrl":236,"meta":239,"navigation":245,"partial":245,"path":246,"seo":247,"slug":236,"stem":248,"url":249,"__hash__":250},"pages_en\u002Fcontent\u002F_footer.md","About Jeroen Bach",{"type":228,"value":229,"toc":234},"minimark",[230],[231,232,233],"p",{},"Designed in Figma and built with Vue.js, Nuxt.js and Tailwind CSS.\nDeployed via Azure Static Web App and Azure Functions.\nWebsite analytics are powered by Plausible Analytics, deployed using Azure Kubernetes Service.",{"title":21,"searchDepth":131,"depth":131,"links":235},[],null,false,"md",{"readingTime":240},{"text":241,"minutes":242,"time":243,"words":244},"1 min read",0.16,9600,32,true,"\u002Fcontent\u002F_footer",{"title":226,"description":233},"content\u002F_footer","\u002Fcontent\u002F2-about-jeroen-bach","tgPfOB73xkNtsI3Ers_EH08FHEHR7ko45cqNiVgrM0s",{"id":252,"title":253,"body":254,"canonicalUrl":236,"company":236,"contentId":155,"dateModified":236,"datePublished":236,"description":258,"draft":237,"enableProse":237,"excludeFromNavigation":237,"extension":238,"imageAlt":236,"imageUrl":236,"meta":261,"navigation":245,"partial":245,"path":266,"seo":267,"slug":236,"stem":268,"url":269,"__hash__":270},"pages_en\u002Fcontent\u002F_footer-about.md","Footer About",{"type":228,"value":255,"toc":259},[256],[231,257,258],{},"I'm a Software Engineer and Team Lead with over 15 years of professional experience.\nI'm passionate about solving complex problems through simple, elegant solutions.\nThis blog is where I share techniques and insights for building great software, inspired by real-world projects.",{"title":21,"searchDepth":131,"depth":131,"links":260},[],{"readingTime":262},{"text":241,"minutes":263,"time":264,"words":265},0.205,12300,41,"\u002Fcontent\u002F_footer-about",{"description":258},"content\u002F_footer-about","\u002Fcontent\u002F3-footer-about","49ofD3QAU2eKgnsoCR9zQhGEP7EECAsjUJeOHSF1GJI",{"id":272,"company":273,"extension":277,"fullName":278,"github":279,"homePage":280,"imageUrl":276,"linkedIn":281,"meta":282,"role":283,"stem":284,"twitter":285,"userName":286,"__hash__":287},"authors_en\u002Fauthors\u002Fjeroenbach.yaml",{"name":274,"url":275,"imageUrl":276},"Bach.Software","https:\u002F\u002Fbach.software","\u002FJEROEN-_A7R5652-HD-SQUARE-zoom.jpg","yaml","Jeroen Bach","https:\u002F\u002Fgithub.com\u002Fjeroenbach","https:\u002F\u002Fbach.software\u002Fpages\u002Fabout","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fjeroenbach\u002F",{},"Software Engineer \u002F Team Lead","authors\u002Fjeroenbach","https:\u002F\u002Fx.com\u002Fjeroenbach","jeroenbach","QjQ1vpL_EQbLZNaZdDNOjIkS-thm6oxHuAdoNIauNI8",{"id":289,"title":201,"authorName":286,"body":290,"canonicalUrl":236,"category":5324,"contentId":204,"dateModified":205,"datePublished":5325,"description":5326,"draft":237,"excerpt":5327,"extension":238,"imageAlt":236,"imagePosition":5331,"imageUrl":5332,"keywords":5333,"meta":5335,"navigation":245,"path":202,"readingTime":5336,"seo":5341,"slug":236,"stem":203,"url":206,"__hash__":5342,"author":5343},"posts_en\u002Fposts\u002F5.md",{"type":228,"value":291,"toc":5320},[292,295,298,500,507,747,750,3898,3908,3913,3921,3924,3927,5266,5271,5281,5313,5316],[231,293,294],{},"Learn how to create a typescript function that converts arrays into type-safe dictionaries and master conditional types with type inference.",[231,296,297],{},"Have you ever needed to quickly convert an array into a lookup dictionary? While TypeScript provides the basic tools, you'll often find yourself writing repetitive mapping code. Here's the standard approach:",[299,300,305],"pre",{"className":301,"code":302,"filename":303,"language":304,"meta":21,"style":21},"language-typescript shiki shiki-themes github-light github-dark","interface Person { key: number, name: string, birthday: Date }\nconst data: Person[] = [\n  { key: 1, name: 'Rupert', birthday: new Date('1986-04-10')  },\n  { key: 2, name: 'Anna', birthday: new Date('1989-10-10') },\n];\n\n\n\u002F\u002F Create a map using the out of the box Map and Array.map\nconst dict = new Map(data.map(x => [x.key, x]))\n\u002F\u002F    ^ const dict: Map\u003Cnumber, Person>\n\n","usage.ts","typescript",[306,307,308,359,380,412,438,443,449,454,461,495],"code",{"__ignoreMap":21},[309,310,312,316,320,324,328,331,335,338,341,343,346,348,351,353,356],"span",{"class":311,"line":20},"line",[309,313,315],{"class":314},"szBVR","interface",[309,317,319],{"class":318},"sScJk"," Person",[309,321,323],{"class":322},"sVt8B"," { ",[309,325,327],{"class":326},"s4XuR","key",[309,329,330],{"class":314},":",[309,332,334],{"class":333},"sj4cs"," number",[309,336,337],{"class":322},", ",[309,339,340],{"class":326},"name",[309,342,330],{"class":314},[309,344,345],{"class":333}," string",[309,347,337],{"class":322},[309,349,350],{"class":326},"birthday",[309,352,330],{"class":314},[309,354,355],{"class":318}," Date",[309,357,358],{"class":322}," }\n",[309,360,361,364,367,369,371,374,377],{"class":311,"line":131},[309,362,363],{"class":314},"const",[309,365,366],{"class":333}," data",[309,368,330],{"class":314},[309,370,319],{"class":318},[309,372,373],{"class":322},"[] ",[309,375,376],{"class":314},"=",[309,378,379],{"class":322}," [\n",[309,381,382,385,388,391,395,398,401,403,406,409],{"class":311,"line":155},[309,383,384],{"class":322},"  { key: ",[309,386,387],{"class":333},"1",[309,389,390],{"class":322},", name: ",[309,392,394],{"class":393},"sZZnC","'Rupert'",[309,396,397],{"class":322},", birthday: ",[309,399,400],{"class":314},"new",[309,402,355],{"class":318},[309,404,405],{"class":322},"(",[309,407,408],{"class":393},"'1986-04-10'",[309,410,411],{"class":322},")  },\n",[309,413,414,416,419,421,424,426,428,430,432,435],{"class":311,"line":180},[309,415,384],{"class":322},[309,417,418],{"class":333},"2",[309,420,390],{"class":322},[309,422,423],{"class":393},"'Anna'",[309,425,397],{"class":322},[309,427,400],{"class":314},[309,429,355],{"class":318},[309,431,405],{"class":322},[309,433,434],{"class":393},"'1989-10-10'",[309,436,437],{"class":322},") },\n",[309,439,440],{"class":311,"line":204},[309,441,442],{"class":322},"];\n",[309,444,446],{"class":311,"line":445},6,[309,447,448],{"emptyLinePlaceholder":245},"\n",[309,450,452],{"class":311,"line":451},7,[309,453,448],{"emptyLinePlaceholder":245},[309,455,457],{"class":311,"line":456},8,[309,458,460],{"class":459},"sJ8bj","\u002F\u002F Create a map using the out of the box Map and Array.map\n",[309,462,464,466,469,472,475,478,481,484,486,489,492],{"class":311,"line":463},9,[309,465,363],{"class":314},[309,467,468],{"class":333}," dict",[309,470,471],{"class":314}," =",[309,473,474],{"class":314}," new",[309,476,477],{"class":318}," Map",[309,479,480],{"class":322},"(data.",[309,482,483],{"class":318},"map",[309,485,405],{"class":322},[309,487,488],{"class":326},"x",[309,490,491],{"class":314}," =>",[309,493,494],{"class":322}," [x.key, x]))\n",[309,496,497],{"class":311,"line":41},[309,498,499],{"class":459},"\u002F\u002F    ^ const dict: Map\u003Cnumber, Person>\n",[231,501,502,503,506],{},"While this works, you'll quickly notice it feels verbose and repetitive. What if you could write more intuitive code that's both flexible and type-safe? The ",[306,504,505],{},"toMap"," function below gives you exactly that - supporting both property names and custom functions:",[299,508,510],{"className":301,"code":509,"filename":303,"language":304,"meta":21,"style":21},"\u002F\u002F Create a map using the 'key' property\nconst map1 = toMap(data, 'key');\n\u002F\u002F    ^ const map1: Map\u003Cnumber, Person>\n\n\u002F\u002F Create a map using the 'key' function\nconst map2 = toMap(data, x => x.key);\n\u002F\u002F    ^ const map2: Map\u003Cnumber, Person>\n\n\u002F\u002F Create a map using the 'key' property and 'value' property\nconst map3 = toMap(data, 'key', 'name');\n\u002F\u002F    ^ const map3: Map\u003Cnumber, string>\n\n\u002F\u002F Create a map using the 'key' function and 'value' function\nconst map4 = toMap(data, x => x.key, x => x.name);\n\u002F\u002F    ^ const map4: Map\u003Cnumber, string>\n\n\u002F\u002F Create a map using custom functions\nconst map5 = toMap(data, x => x.birthday, x => `Name: ${x.name}`);\n\u002F\u002F    ^ const map5: Map\u003CDate, string>\n\n\u002F\u002F Create a map using no parameters\nconst map6 = toMap(data);\n\u002F\u002F    ^ const map6: Map\u003CPerson, Person>\n\n",[306,511,512,517,538,543,547,552,572,577,581,586,608,614,619,625,653,659,664,670,710,716,720,726,741],{"__ignoreMap":21},[309,513,514],{"class":311,"line":20},[309,515,516],{"class":459},"\u002F\u002F Create a map using the 'key' property\n",[309,518,519,521,524,526,529,532,535],{"class":311,"line":131},[309,520,363],{"class":314},[309,522,523],{"class":333}," map1",[309,525,471],{"class":314},[309,527,528],{"class":318}," toMap",[309,530,531],{"class":322},"(data, ",[309,533,534],{"class":393},"'key'",[309,536,537],{"class":322},");\n",[309,539,540],{"class":311,"line":155},[309,541,542],{"class":459},"\u002F\u002F    ^ const map1: Map\u003Cnumber, Person>\n",[309,544,545],{"class":311,"line":180},[309,546,448],{"emptyLinePlaceholder":245},[309,548,549],{"class":311,"line":204},[309,550,551],{"class":459},"\u002F\u002F Create a map using the 'key' function\n",[309,553,554,556,559,561,563,565,567,569],{"class":311,"line":445},[309,555,363],{"class":314},[309,557,558],{"class":333}," map2",[309,560,471],{"class":314},[309,562,528],{"class":318},[309,564,531],{"class":322},[309,566,488],{"class":326},[309,568,491],{"class":314},[309,570,571],{"class":322}," x.key);\n",[309,573,574],{"class":311,"line":451},[309,575,576],{"class":459},"\u002F\u002F    ^ const map2: Map\u003Cnumber, Person>\n",[309,578,579],{"class":311,"line":456},[309,580,448],{"emptyLinePlaceholder":245},[309,582,583],{"class":311,"line":463},[309,584,585],{"class":459},"\u002F\u002F Create a map using the 'key' property and 'value' property\n",[309,587,588,590,593,595,597,599,601,603,606],{"class":311,"line":41},[309,589,363],{"class":314},[309,591,592],{"class":333}," map3",[309,594,471],{"class":314},[309,596,528],{"class":318},[309,598,531],{"class":322},[309,600,534],{"class":393},[309,602,337],{"class":322},[309,604,605],{"class":393},"'name'",[309,607,537],{"class":322},[309,609,611],{"class":311,"line":610},11,[309,612,613],{"class":459},"\u002F\u002F    ^ const map3: Map\u003Cnumber, string>\n",[309,615,617],{"class":311,"line":616},12,[309,618,448],{"emptyLinePlaceholder":245},[309,620,622],{"class":311,"line":621},13,[309,623,624],{"class":459},"\u002F\u002F Create a map using the 'key' function and 'value' function\n",[309,626,628,630,633,635,637,639,641,643,646,648,650],{"class":311,"line":627},14,[309,629,363],{"class":314},[309,631,632],{"class":333}," map4",[309,634,471],{"class":314},[309,636,528],{"class":318},[309,638,531],{"class":322},[309,640,488],{"class":326},[309,642,491],{"class":314},[309,644,645],{"class":322}," x.key, ",[309,647,488],{"class":326},[309,649,491],{"class":314},[309,651,652],{"class":322}," x.name);\n",[309,654,656],{"class":311,"line":655},15,[309,657,658],{"class":459},"\u002F\u002F    ^ const map4: Map\u003Cnumber, string>\n",[309,660,662],{"class":311,"line":661},16,[309,663,448],{"emptyLinePlaceholder":245},[309,665,667],{"class":311,"line":666},17,[309,668,669],{"class":459},"\u002F\u002F Create a map using custom functions\n",[309,671,673,675,678,680,682,684,686,688,691,693,695,698,700,703,705,708],{"class":311,"line":672},18,[309,674,363],{"class":314},[309,676,677],{"class":333}," map5",[309,679,471],{"class":314},[309,681,528],{"class":318},[309,683,531],{"class":322},[309,685,488],{"class":326},[309,687,491],{"class":314},[309,689,690],{"class":322}," x.birthday, ",[309,692,488],{"class":326},[309,694,491],{"class":314},[309,696,697],{"class":393}," `Name: ${",[309,699,488],{"class":322},[309,701,702],{"class":393},".",[309,704,340],{"class":322},[309,706,707],{"class":393},"}`",[309,709,537],{"class":322},[309,711,713],{"class":311,"line":712},19,[309,714,715],{"class":459},"\u002F\u002F    ^ const map5: Map\u003CDate, string>\n",[309,717,718],{"class":311,"line":55},[309,719,448],{"emptyLinePlaceholder":245},[309,721,723],{"class":311,"line":722},21,[309,724,725],{"class":459},"\u002F\u002F Create a map using no parameters\n",[309,727,729,731,734,736,738],{"class":311,"line":728},22,[309,730,363],{"class":314},[309,732,733],{"class":333}," map6",[309,735,471],{"class":314},[309,737,528],{"class":318},[309,739,740],{"class":322},"(data);\n",[309,742,744],{"class":311,"line":743},23,[309,745,746],{"class":459},"\u002F\u002F    ^ const map6: Map\u003CPerson, Person>\n",[231,748,749],{},"Ready to build this powerful utility? Follow along as we construct it step by step. Each iteration will teach you new TypeScript concepts that you can apply to your own projects:\n(click on the edges of the code block to step forward or backward through the versions)",[751,752,754,949,1216,1667,2077,2494,3163],"code-group",{":tabs-as-steps":753},"true",[299,755,757],{"className":301,"code":756,"filename":387,"language":304,"meta":21,"style":21},"\u002F\u002F Start simple - you'll build complexity gradually\nexport function toMap\u003CT, K>(\n  array: readonly T[],\n  keyFn: ((item: T) => K),\n) {\n  if (!array?.length) return new Map\u003CK, T>();\n\n  return new Map\u003CK, T>(array.map(item => [keyFn(item), item]));\n}\n\nconst dict = toMap(data, x => x.birthday);\n\u002F\u002F    ^ const dict: Map\u003CDate, Person>\n",[306,758,759,764,788,804,833,838,875,879,916,921,925,944],{"__ignoreMap":21},[309,760,761],{"class":311,"line":20},[309,762,763],{"class":459},"\u002F\u002F Start simple - you'll build complexity gradually\n",[309,765,766,769,772,774,777,780,782,785],{"class":311,"line":131},[309,767,768],{"class":314},"export",[309,770,771],{"class":314}," function",[309,773,528],{"class":318},[309,775,776],{"class":322},"\u003C",[309,778,779],{"class":318},"T",[309,781,337],{"class":322},[309,783,784],{"class":318},"K",[309,786,787],{"class":322},">(\n",[309,789,790,793,795,798,801],{"class":311,"line":155},[309,791,792],{"class":326},"  array",[309,794,330],{"class":314},[309,796,797],{"class":314}," readonly",[309,799,800],{"class":318}," T",[309,802,803],{"class":322},"[],\n",[309,805,806,809,811,814,817,819,821,824,827,830],{"class":311,"line":180},[309,807,808],{"class":326},"  keyFn",[309,810,330],{"class":314},[309,812,813],{"class":322}," ((",[309,815,816],{"class":326},"item",[309,818,330],{"class":314},[309,820,800],{"class":318},[309,822,823],{"class":322},") ",[309,825,826],{"class":314},"=>",[309,828,829],{"class":318}," K",[309,831,832],{"class":322},"),\n",[309,834,835],{"class":311,"line":204},[309,836,837],{"class":322},") {\n",[309,839,840,843,846,849,852,855,857,860,862,864,866,868,870,872],{"class":311,"line":445},[309,841,842],{"class":314},"  if",[309,844,845],{"class":322}," (",[309,847,848],{"class":314},"!",[309,850,851],{"class":322},"array?.",[309,853,854],{"class":333},"length",[309,856,823],{"class":322},[309,858,859],{"class":314},"return",[309,861,474],{"class":314},[309,863,477],{"class":318},[309,865,776],{"class":322},[309,867,784],{"class":318},[309,869,337],{"class":322},[309,871,779],{"class":318},[309,873,874],{"class":322},">();\n",[309,876,877],{"class":311,"line":451},[309,878,448],{"emptyLinePlaceholder":245},[309,880,881,884,886,888,890,892,894,896,899,901,903,905,907,910,913],{"class":311,"line":456},[309,882,883],{"class":314},"  return",[309,885,474],{"class":314},[309,887,477],{"class":318},[309,889,776],{"class":322},[309,891,784],{"class":318},[309,893,337],{"class":322},[309,895,779],{"class":318},[309,897,898],{"class":322},">(array.",[309,900,483],{"class":318},[309,902,405],{"class":322},[309,904,816],{"class":326},[309,906,491],{"class":314},[309,908,909],{"class":322}," [",[309,911,912],{"class":318},"keyFn",[309,914,915],{"class":322},"(item), item]));\n",[309,917,918],{"class":311,"line":463},[309,919,920],{"class":322},"}\n",[309,922,923],{"class":311,"line":41},[309,924,448],{"emptyLinePlaceholder":245},[309,926,927,929,931,933,935,937,939,941],{"class":311,"line":610},[309,928,363],{"class":314},[309,930,468],{"class":333},[309,932,471],{"class":314},[309,934,528],{"class":318},[309,936,531],{"class":322},[309,938,488],{"class":326},[309,940,491],{"class":314},[309,942,943],{"class":322}," x.birthday);\n",[309,945,946],{"class":311,"line":616},[309,947,948],{"class":459},"\u002F\u002F    ^ const dict: Map\u003CDate, Person>\n",[299,950,952],{"className":301,"code":951,"filename":418,"language":304,"meta":21,"style":21},"\u002F\u002F We add some spacing to go through the steps without lines jumping around\n\nexport function toMap\u003C\n  T, \n  K\n\n>(\n  array: readonly T[],\n  keyFn: ((item: T) => K),\n\n) {\n\n\n\n\n\n\n\n\n\n  if (!array?.length) return new Map\u003CK, T>();\n\n\n\n\n\n\n\n\n\n  return new Map\u003CK, T>(array.map(item => [keyFn(item), item]));\n}\n\n\nconst dict = toMap(data, x => x.birthday);\n\u002F\u002F    ^ const dict: Map\u003CDate, Person>\n\n",[306,953,954,959,963,974,982,987,991,995,1007,1029,1033,1037,1041,1045,1049,1053,1057,1061,1065,1069,1073,1103,1107,1111,1116,1121,1126,1131,1136,1141,1145,1178,1182,1187,1192,1211],{"__ignoreMap":21},[309,955,956],{"class":311,"line":20},[309,957,958],{"class":459},"\u002F\u002F We add some spacing to go through the steps without lines jumping around\n",[309,960,961],{"class":311,"line":131},[309,962,448],{"emptyLinePlaceholder":245},[309,964,965,967,969,971],{"class":311,"line":155},[309,966,768],{"class":314},[309,968,771],{"class":314},[309,970,528],{"class":318},[309,972,973],{"class":322},"\u003C\n",[309,975,976,979],{"class":311,"line":180},[309,977,978],{"class":318},"  T",[309,980,981],{"class":322},", \n",[309,983,984],{"class":311,"line":204},[309,985,986],{"class":318},"  K\n",[309,988,989],{"class":311,"line":445},[309,990,448],{"emptyLinePlaceholder":245},[309,992,993],{"class":311,"line":451},[309,994,787],{"class":322},[309,996,997,999,1001,1003,1005],{"class":311,"line":456},[309,998,792],{"class":326},[309,1000,330],{"class":314},[309,1002,797],{"class":314},[309,1004,800],{"class":318},[309,1006,803],{"class":322},[309,1008,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027],{"class":311,"line":463},[309,1010,808],{"class":326},[309,1012,330],{"class":314},[309,1014,813],{"class":322},[309,1016,816],{"class":326},[309,1018,330],{"class":314},[309,1020,800],{"class":318},[309,1022,823],{"class":322},[309,1024,826],{"class":314},[309,1026,829],{"class":318},[309,1028,832],{"class":322},[309,1030,1031],{"class":311,"line":41},[309,1032,448],{"emptyLinePlaceholder":245},[309,1034,1035],{"class":311,"line":610},[309,1036,837],{"class":322},[309,1038,1039],{"class":311,"line":616},[309,1040,448],{"emptyLinePlaceholder":245},[309,1042,1043],{"class":311,"line":621},[309,1044,448],{"emptyLinePlaceholder":245},[309,1046,1047],{"class":311,"line":627},[309,1048,448],{"emptyLinePlaceholder":245},[309,1050,1051],{"class":311,"line":655},[309,1052,448],{"emptyLinePlaceholder":245},[309,1054,1055],{"class":311,"line":661},[309,1056,448],{"emptyLinePlaceholder":245},[309,1058,1059],{"class":311,"line":666},[309,1060,448],{"emptyLinePlaceholder":245},[309,1062,1063],{"class":311,"line":672},[309,1064,448],{"emptyLinePlaceholder":245},[309,1066,1067],{"class":311,"line":712},[309,1068,448],{"emptyLinePlaceholder":245},[309,1070,1071],{"class":311,"line":55},[309,1072,448],{"emptyLinePlaceholder":245},[309,1074,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101],{"class":311,"line":722},[309,1076,842],{"class":314},[309,1078,845],{"class":322},[309,1080,848],{"class":314},[309,1082,851],{"class":322},[309,1084,854],{"class":333},[309,1086,823],{"class":322},[309,1088,859],{"class":314},[309,1090,474],{"class":314},[309,1092,477],{"class":318},[309,1094,776],{"class":322},[309,1096,784],{"class":318},[309,1098,337],{"class":322},[309,1100,779],{"class":318},[309,1102,874],{"class":322},[309,1104,1105],{"class":311,"line":728},[309,1106,448],{"emptyLinePlaceholder":245},[309,1108,1109],{"class":311,"line":743},[309,1110,448],{"emptyLinePlaceholder":245},[309,1112,1114],{"class":311,"line":1113},24,[309,1115,448],{"emptyLinePlaceholder":245},[309,1117,1119],{"class":311,"line":1118},25,[309,1120,448],{"emptyLinePlaceholder":245},[309,1122,1124],{"class":311,"line":1123},26,[309,1125,448],{"emptyLinePlaceholder":245},[309,1127,1129],{"class":311,"line":1128},27,[309,1130,448],{"emptyLinePlaceholder":245},[309,1132,1134],{"class":311,"line":1133},28,[309,1135,448],{"emptyLinePlaceholder":245},[309,1137,1139],{"class":311,"line":1138},29,[309,1140,448],{"emptyLinePlaceholder":245},[309,1142,1143],{"class":311,"line":69},[309,1144,448],{"emptyLinePlaceholder":245},[309,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176],{"class":311,"line":1147},31,[309,1149,883],{"class":314},[309,1151,474],{"class":314},[309,1153,477],{"class":318},[309,1155,776],{"class":322},[309,1157,784],{"class":318},[309,1159,337],{"class":322},[309,1161,779],{"class":318},[309,1163,898],{"class":322},[309,1165,483],{"class":318},[309,1167,405],{"class":322},[309,1169,816],{"class":326},[309,1171,491],{"class":314},[309,1173,909],{"class":322},[309,1175,912],{"class":318},[309,1177,915],{"class":322},[309,1179,1180],{"class":311,"line":244},[309,1181,920],{"class":322},[309,1183,1185],{"class":311,"line":1184},33,[309,1186,448],{"emptyLinePlaceholder":245},[309,1188,1190],{"class":311,"line":1189},34,[309,1191,448],{"emptyLinePlaceholder":245},[309,1193,1195,1197,1199,1201,1203,1205,1207,1209],{"class":311,"line":1194},35,[309,1196,363],{"class":314},[309,1198,468],{"class":333},[309,1200,471],{"class":314},[309,1202,528],{"class":318},[309,1204,531],{"class":322},[309,1206,488],{"class":326},[309,1208,491],{"class":314},[309,1210,943],{"class":322},[309,1212,1214],{"class":311,"line":1213},36,[309,1215,948],{"class":459},[299,1217,1221],{"className":1218,"code":1219,"filename":1220,"language":304,"meta":21,"style":21},"language-typescript shiki shiki-themes github-light github-dark has-highlighted","\u002F\u002F Now you'll learn conditional types - expand the key parameter to accept property names [!code highlight]\n\u002F\u002F and move the key type to generics so you can reference it later [!code highlight]\nexport function toMap\u003C\n  T, \n  K, \n  KF extends keyof T | ((item: T) => K) \u002F\u002F [!code highlight]\n>(\n  array: readonly T[],\n  key: KF, \u002F\u002F [!code highlight]\n\n) {\n  \u002F\u002F - Create your first conditional type - it chooses between property type or function return type [!code highlight]\n  type TKeyType = KF extends keyof T  \u002F\u002F [!code highlight]\n  ? T[KF]                             \u002F\u002F [!code highlight]\n  : KF extends ((item: T) => K)       \u002F\u002F [!code highlight]\n    ? K                               \u002F\u002F [!code highlight]\n    : never;                          \u002F\u002F [!code highlight]\n\n\n\n  if (!array?.length) return new Map\u003CTKeyType, T>();\n\n  \u002F\u002F - You'll hit a TypeScript error here - Type 'K' is not assignable to type 'TKeyType' [!code highlight]\n  const keyFn: (item: T) => TKeyType \u002F\u002F [!code highlight]\n    = typeof key === 'function'\n      ? key\n      : typeof array[0] === 'object' && array[0] !== null\n        ? item => item[key as keyof T]\n        : item => item; \u002F\u002F Fallback when the array contains primitive values\n\n  return new Map\u003CTKeyType, T>(array.map(item => [keyFn(item), item]));\n}\n\n\u002F\u002F - Not the type safety you want yet  [!code highlight]\nconst dict = toMap(data, x => x.birthday);  \u002F\u002F [!code highlight]\n\u002F\u002F    ^ const dict: Map\u003Cunknown, Person> [!code highlight]\n","3",[306,1222,1223,1228,1235,1246,1252,1259,1292,1296,1308,1321,1325,1329,1334,1353,1370,1397,1405,1417,1421,1425,1429,1460,1464,1469,1494,1511,1519,1555,1578,1593,1597,1629,1633,1637,1642,1662],{"__ignoreMap":21},[309,1224,1225],{"class":311,"line":20},[309,1226,1227],{"class":459},"\u002F\u002F Now you'll learn conditional types - expand the key parameter to accept property names",[309,1229,1232],{"class":1230,"line":131},[311,1231],"highlighted",[309,1233,1234],{"class":459},"\u002F\u002F and move the key type to generics so you can reference it later",[309,1236,1238,1240,1242,1244],{"class":1237,"line":155},[311,1231],[309,1239,768],{"class":314},[309,1241,771],{"class":314},[309,1243,528],{"class":318},[309,1245,973],{"class":322},[309,1247,1248,1250],{"class":311,"line":180},[309,1249,978],{"class":318},[309,1251,981],{"class":322},[309,1253,1254,1257],{"class":311,"line":204},[309,1255,1256],{"class":318},"  K",[309,1258,981],{"class":322},[309,1260,1262,1265,1268,1271,1273,1276,1278,1280,1282,1284,1286,1288,1290],{"class":1261,"line":445},[311,1231],[309,1263,1264],{"class":318},"  KF",[309,1266,1267],{"class":314}," extends",[309,1269,1270],{"class":314}," keyof",[309,1272,800],{"class":318},[309,1274,1275],{"class":314}," |",[309,1277,813],{"class":322},[309,1279,816],{"class":326},[309,1281,330],{"class":314},[309,1283,800],{"class":318},[309,1285,823],{"class":322},[309,1287,826],{"class":314},[309,1289,829],{"class":318},[309,1291,823],{"class":322},[309,1293,1294],{"class":311,"line":451},[309,1295,787],{"class":322},[309,1297,1298,1300,1302,1304,1306],{"class":311,"line":456},[309,1299,792],{"class":326},[309,1301,330],{"class":314},[309,1303,797],{"class":314},[309,1305,800],{"class":318},[309,1307,803],{"class":322},[309,1309,1311,1314,1316,1319],{"class":1310,"line":463},[311,1231],[309,1312,1313],{"class":326},"  key",[309,1315,330],{"class":314},[309,1317,1318],{"class":318}," KF",[309,1320,337],{"class":322},[309,1322,1323],{"class":311,"line":41},[309,1324,448],{"emptyLinePlaceholder":245},[309,1326,1327],{"class":311,"line":610},[309,1328,837],{"class":322},[309,1330,1331],{"class":311,"line":616},[309,1332,1333],{"class":459},"  \u002F\u002F - Create your first conditional type - it chooses between property type or function return type",[309,1335,1337,1340,1343,1345,1347,1349,1351],{"class":1336,"line":621},[311,1231],[309,1338,1339],{"class":314},"  type",[309,1341,1342],{"class":318}," TKeyType",[309,1344,471],{"class":314},[309,1346,1318],{"class":318},[309,1348,1267],{"class":314},[309,1350,1270],{"class":314},[309,1352,800],{"class":318},[309,1354,1356,1359,1361,1364,1367],{"class":1355,"line":627},[311,1231],[309,1357,1358],{"class":314},"  ?",[309,1360,800],{"class":318},[309,1362,1363],{"class":322},"[",[309,1365,1366],{"class":318},"KF",[309,1368,1369],{"class":322},"]                             ",[309,1371,1373,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394],{"class":1372,"line":655},[311,1231],[309,1374,1375],{"class":314},"  :",[309,1377,1318],{"class":318},[309,1379,1267],{"class":314},[309,1381,813],{"class":322},[309,1383,816],{"class":326},[309,1385,330],{"class":314},[309,1387,800],{"class":318},[309,1389,823],{"class":322},[309,1391,826],{"class":314},[309,1393,829],{"class":318},[309,1395,1396],{"class":322},")       ",[309,1398,1400,1403],{"class":1399,"line":661},[311,1231],[309,1401,1402],{"class":314},"    ?",[309,1404,829],{"class":318},[309,1406,1408,1411,1414],{"class":1407,"line":666},[311,1231],[309,1409,1410],{"class":314},"    :",[309,1412,1413],{"class":333}," never",[309,1415,1416],{"class":322},";                          ",[309,1418,1419],{"class":311,"line":672},[309,1420,448],{"emptyLinePlaceholder":245},[309,1422,1423],{"class":311,"line":712},[309,1424,448],{"emptyLinePlaceholder":245},[309,1426,1427],{"class":311,"line":55},[309,1428,448],{"emptyLinePlaceholder":245},[309,1430,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1454,1456,1458],{"class":311,"line":722},[309,1432,842],{"class":314},[309,1434,845],{"class":322},[309,1436,848],{"class":314},[309,1438,851],{"class":322},[309,1440,854],{"class":333},[309,1442,823],{"class":322},[309,1444,859],{"class":314},[309,1446,474],{"class":314},[309,1448,477],{"class":318},[309,1450,776],{"class":322},[309,1452,1453],{"class":318},"TKeyType",[309,1455,337],{"class":322},[309,1457,779],{"class":318},[309,1459,874],{"class":322},[309,1461,1462],{"class":311,"line":728},[309,1463,448],{"emptyLinePlaceholder":245},[309,1465,1466],{"class":311,"line":743},[309,1467,1468],{"class":459},"  \u002F\u002F - You'll hit a TypeScript error here - Type 'K' is not assignable to type 'TKeyType'",[309,1470,1472,1475,1478,1480,1482,1484,1486,1488,1490,1492],{"class":1471,"line":1113},[311,1231],[309,1473,1474],{"class":314},"  const",[309,1476,1477],{"class":318}," keyFn",[309,1479,330],{"class":314},[309,1481,845],{"class":322},[309,1483,816],{"class":326},[309,1485,330],{"class":314},[309,1487,800],{"class":318},[309,1489,823],{"class":322},[309,1491,826],{"class":314},[309,1493,1342],{"class":318},[309,1495,1496,1499,1502,1505,1508],{"class":311,"line":1118},[309,1497,1498],{"class":314},"    =",[309,1500,1501],{"class":314}," typeof",[309,1503,1504],{"class":322}," key ",[309,1506,1507],{"class":314},"===",[309,1509,1510],{"class":393}," 'function'\n",[309,1512,1513,1516],{"class":311,"line":1123},[309,1514,1515],{"class":314},"      ?",[309,1517,1518],{"class":322}," key\n",[309,1520,1521,1524,1526,1529,1532,1535,1537,1540,1543,1545,1547,1549,1552],{"class":311,"line":1128},[309,1522,1523],{"class":314},"      :",[309,1525,1501],{"class":314},[309,1527,1528],{"class":322}," array[",[309,1530,1531],{"class":333},"0",[309,1533,1534],{"class":322},"] ",[309,1536,1507],{"class":314},[309,1538,1539],{"class":393}," 'object'",[309,1541,1542],{"class":314}," &&",[309,1544,1528],{"class":322},[309,1546,1531],{"class":333},[309,1548,1534],{"class":322},[309,1550,1551],{"class":314},"!==",[309,1553,1554],{"class":333}," null\n",[309,1556,1557,1560,1563,1565,1568,1571,1573,1575],{"class":311,"line":1133},[309,1558,1559],{"class":314},"        ?",[309,1561,1562],{"class":326}," item",[309,1564,491],{"class":314},[309,1566,1567],{"class":322}," item[key ",[309,1569,1570],{"class":314},"as",[309,1572,1270],{"class":314},[309,1574,800],{"class":318},[309,1576,1577],{"class":322},"]\n",[309,1579,1580,1583,1585,1587,1590],{"class":311,"line":1138},[309,1581,1582],{"class":314},"        :",[309,1584,1562],{"class":326},[309,1586,491],{"class":314},[309,1588,1589],{"class":322}," item; ",[309,1591,1592],{"class":459},"\u002F\u002F Fallback when the array contains primitive values\n",[309,1594,1595],{"class":311,"line":69},[309,1596,448],{"emptyLinePlaceholder":245},[309,1598,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627],{"class":311,"line":1147},[309,1600,883],{"class":314},[309,1602,474],{"class":314},[309,1604,477],{"class":318},[309,1606,776],{"class":322},[309,1608,1453],{"class":318},[309,1610,337],{"class":322},[309,1612,779],{"class":318},[309,1614,898],{"class":322},[309,1616,483],{"class":318},[309,1618,405],{"class":322},[309,1620,816],{"class":326},[309,1622,491],{"class":314},[309,1624,909],{"class":322},[309,1626,912],{"class":318},[309,1628,915],{"class":322},[309,1630,1631],{"class":311,"line":244},[309,1632,920],{"class":322},[309,1634,1635],{"class":311,"line":1184},[309,1636,448],{"emptyLinePlaceholder":245},[309,1638,1639],{"class":311,"line":1189},[309,1640,1641],{"class":459},"\u002F\u002F - Not the type safety you want yet",[309,1643,1645,1647,1649,1651,1653,1655,1657,1659],{"class":1644,"line":1194},[311,1231],[309,1646,363],{"class":314},[309,1648,468],{"class":333},[309,1650,471],{"class":314},[309,1652,528],{"class":318},[309,1654,531],{"class":322},[309,1656,488],{"class":326},[309,1658,491],{"class":314},[309,1660,1661],{"class":322}," x.birthday);  ",[309,1663,1664],{"class":311,"line":1213},[309,1665,1666],{"class":459},"\u002F\u002F    ^ const dict: Map\u003Cunknown, Person>",[299,1668,1671],{"className":1218,"code":1669,"filename":1670,"language":304,"meta":21,"style":21},"\u002F\u002F Here's how you solve the error - use type inference instead   [!code highlight]\n\u002F\u002F - Remove the K type parameter and let TypeScript infer it  [!code highlight]\nexport function toMap\u003C\n  T,\n   \n  KF extends keyof T | ((item: T) => any) \u002F\u002F [!code highlight]\n>(\n  array: readonly T[],\n  key: KF, \u002F\u002F [!code highlight]\n\n) {\n  \u002F\u002F - Let TypeScript infer the return type for you [!code highlight]\n  type TKeyType = KF extends keyof T  \n  ? T[KF]                             \n  : KF extends ((item: T) => infer K) \u002F\u002F [!code highlight]\n    ? K                               \n    : never;                          \n\n\n\n  if (!array?.length) return new Map\u003CTKeyType, T>();\n\n  \n  const keyFn: (item: T) => TKeyType\n    = typeof key === 'function'\n      ? key\n      : typeof array[0] === 'object' && array[0] !== null\n        ? item => item[key as keyof T]\n        : item => item; \n\n  return new Map\u003CTKeyType, T>(array.map(item => [keyFn(item), item]));\n}\n\n\u002F\u002F - Perfect! Now you get proper type inference [!code highlight]\nconst dict = toMap(data, x => x.birthday);  \u002F\u002F [!code highlight]\n\u002F\u002F    ^ const dict: Map\u003CDate, Person> [!code highlight]\n","4",[306,1672,1673,1678,1684,1695,1702,1707,1737,1741,1753,1764,1768,1772,1777,1797,1810,1838,1847,1856,1860,1864,1868,1898,1902,1906,1929,1941,1947,1975,1993,2004,2008,2040,2044,2048,2053,2072],{"__ignoreMap":21},[309,1674,1675],{"class":311,"line":20},[309,1676,1677],{"class":459},"\u002F\u002F Here's how you solve the error - use type inference instead",[309,1679,1681],{"class":1680,"line":131},[311,1231],[309,1682,1683],{"class":459},"\u002F\u002F - Remove the K type parameter and let TypeScript infer it",[309,1685,1687,1689,1691,1693],{"class":1686,"line":155},[311,1231],[309,1688,768],{"class":314},[309,1690,771],{"class":314},[309,1692,528],{"class":318},[309,1694,973],{"class":322},[309,1696,1697,1699],{"class":311,"line":180},[309,1698,978],{"class":318},[309,1700,1701],{"class":322},",\n",[309,1703,1704],{"class":311,"line":204},[309,1705,1706],{"class":322},"   \n",[309,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1735],{"class":1709,"line":445},[311,1231],[309,1711,1264],{"class":318},[309,1713,1267],{"class":314},[309,1715,1270],{"class":314},[309,1717,800],{"class":318},[309,1719,1275],{"class":314},[309,1721,813],{"class":322},[309,1723,816],{"class":326},[309,1725,330],{"class":314},[309,1727,800],{"class":318},[309,1729,823],{"class":322},[309,1731,826],{"class":314},[309,1733,1734],{"class":333}," any",[309,1736,823],{"class":322},[309,1738,1739],{"class":311,"line":451},[309,1740,787],{"class":322},[309,1742,1743,1745,1747,1749,1751],{"class":311,"line":456},[309,1744,792],{"class":326},[309,1746,330],{"class":314},[309,1748,797],{"class":314},[309,1750,800],{"class":318},[309,1752,803],{"class":322},[309,1754,1756,1758,1760,1762],{"class":1755,"line":463},[311,1231],[309,1757,1313],{"class":326},[309,1759,330],{"class":314},[309,1761,1318],{"class":318},[309,1763,337],{"class":322},[309,1765,1766],{"class":311,"line":41},[309,1767,448],{"emptyLinePlaceholder":245},[309,1769,1770],{"class":311,"line":610},[309,1771,837],{"class":322},[309,1773,1774],{"class":311,"line":616},[309,1775,1776],{"class":459},"  \u002F\u002F - Let TypeScript infer the return type for you",[309,1778,1780,1782,1784,1786,1788,1790,1792,1794],{"class":1779,"line":621},[311,1231],[309,1781,1339],{"class":314},[309,1783,1342],{"class":318},[309,1785,471],{"class":314},[309,1787,1318],{"class":318},[309,1789,1267],{"class":314},[309,1791,1270],{"class":314},[309,1793,800],{"class":318},[309,1795,1796],{"class":322},"  \n",[309,1798,1799,1801,1803,1805,1807],{"class":311,"line":627},[309,1800,1358],{"class":314},[309,1802,800],{"class":318},[309,1804,1363],{"class":322},[309,1806,1366],{"class":318},[309,1808,1809],{"class":322},"]                             \n",[309,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1834,1836],{"class":1812,"line":655},[311,1231],[309,1814,1375],{"class":314},[309,1816,1318],{"class":318},[309,1818,1267],{"class":314},[309,1820,813],{"class":322},[309,1822,816],{"class":326},[309,1824,330],{"class":314},[309,1826,800],{"class":318},[309,1828,823],{"class":322},[309,1830,826],{"class":314},[309,1832,1833],{"class":314}," infer",[309,1835,829],{"class":318},[309,1837,823],{"class":322},[309,1839,1840,1842,1844],{"class":311,"line":661},[309,1841,1402],{"class":314},[309,1843,829],{"class":318},[309,1845,1846],{"class":322},"                               \n",[309,1848,1849,1851,1853],{"class":311,"line":666},[309,1850,1410],{"class":314},[309,1852,1413],{"class":333},[309,1854,1855],{"class":322},";                          \n",[309,1857,1858],{"class":311,"line":672},[309,1859,448],{"emptyLinePlaceholder":245},[309,1861,1862],{"class":311,"line":712},[309,1863,448],{"emptyLinePlaceholder":245},[309,1865,1866],{"class":311,"line":55},[309,1867,448],{"emptyLinePlaceholder":245},[309,1869,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896],{"class":311,"line":722},[309,1871,842],{"class":314},[309,1873,845],{"class":322},[309,1875,848],{"class":314},[309,1877,851],{"class":322},[309,1879,854],{"class":333},[309,1881,823],{"class":322},[309,1883,859],{"class":314},[309,1885,474],{"class":314},[309,1887,477],{"class":318},[309,1889,776],{"class":322},[309,1891,1453],{"class":318},[309,1893,337],{"class":322},[309,1895,779],{"class":318},[309,1897,874],{"class":322},[309,1899,1900],{"class":311,"line":728},[309,1901,448],{"emptyLinePlaceholder":245},[309,1903,1904],{"class":311,"line":743},[309,1905,1796],{"class":322},[309,1907,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926],{"class":311,"line":1113},[309,1909,1474],{"class":314},[309,1911,1477],{"class":318},[309,1913,330],{"class":314},[309,1915,845],{"class":322},[309,1917,816],{"class":326},[309,1919,330],{"class":314},[309,1921,800],{"class":318},[309,1923,823],{"class":322},[309,1925,826],{"class":314},[309,1927,1928],{"class":318}," TKeyType\n",[309,1930,1931,1933,1935,1937,1939],{"class":311,"line":1118},[309,1932,1498],{"class":314},[309,1934,1501],{"class":314},[309,1936,1504],{"class":322},[309,1938,1507],{"class":314},[309,1940,1510],{"class":393},[309,1942,1943,1945],{"class":311,"line":1123},[309,1944,1515],{"class":314},[309,1946,1518],{"class":322},[309,1948,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973],{"class":311,"line":1128},[309,1950,1523],{"class":314},[309,1952,1501],{"class":314},[309,1954,1528],{"class":322},[309,1956,1531],{"class":333},[309,1958,1534],{"class":322},[309,1960,1507],{"class":314},[309,1962,1539],{"class":393},[309,1964,1542],{"class":314},[309,1966,1528],{"class":322},[309,1968,1531],{"class":333},[309,1970,1534],{"class":322},[309,1972,1551],{"class":314},[309,1974,1554],{"class":333},[309,1976,1977,1979,1981,1983,1985,1987,1989,1991],{"class":311,"line":1133},[309,1978,1559],{"class":314},[309,1980,1562],{"class":326},[309,1982,491],{"class":314},[309,1984,1567],{"class":322},[309,1986,1570],{"class":314},[309,1988,1270],{"class":314},[309,1990,800],{"class":318},[309,1992,1577],{"class":322},[309,1994,1995,1997,1999,2001],{"class":311,"line":1138},[309,1996,1582],{"class":314},[309,1998,1562],{"class":326},[309,2000,491],{"class":314},[309,2002,2003],{"class":322}," item; \n",[309,2005,2006],{"class":311,"line":69},[309,2007,448],{"emptyLinePlaceholder":245},[309,2009,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038],{"class":311,"line":1147},[309,2011,883],{"class":314},[309,2013,474],{"class":314},[309,2015,477],{"class":318},[309,2017,776],{"class":322},[309,2019,1453],{"class":318},[309,2021,337],{"class":322},[309,2023,779],{"class":318},[309,2025,898],{"class":322},[309,2027,483],{"class":318},[309,2029,405],{"class":322},[309,2031,816],{"class":326},[309,2033,491],{"class":314},[309,2035,909],{"class":322},[309,2037,912],{"class":318},[309,2039,915],{"class":322},[309,2041,2042],{"class":311,"line":244},[309,2043,920],{"class":322},[309,2045,2046],{"class":311,"line":1184},[309,2047,448],{"emptyLinePlaceholder":245},[309,2049,2050],{"class":311,"line":1189},[309,2051,2052],{"class":459},"\u002F\u002F - Perfect! Now you get proper type inference",[309,2054,2056,2058,2060,2062,2064,2066,2068,2070],{"class":2055,"line":1194},[311,1231],[309,2057,363],{"class":314},[309,2059,468],{"class":333},[309,2061,471],{"class":314},[309,2063,528],{"class":318},[309,2065,531],{"class":322},[309,2067,488],{"class":326},[309,2069,491],{"class":314},[309,2071,1661],{"class":322},[309,2073,2074],{"class":311,"line":1213},[309,2075,2076],{"class":459},"\u002F\u002F    ^ const dict: Map\u003CDate, Person>",[299,2078,2081],{"className":1218,"code":2079,"filename":2080,"language":304,"meta":21,"style":21},"\u002F\u002F Make the function more flexible - optional parameters allow you to do more  [!code highlight]\n\nexport function toMap\u003C\n  T,\n\n  KF extends keyof T | ((item: T) => any) | undefined, \u002F\u002F [!code highlight]\n>(\n  array: readonly T[],\n  key?: KF, \u002F\u002F [!code highlight]\n\n) {\n  \u002F\u002F - Handle the optional case in your conditional types, by returning T [!code highlight]\n  type TKeyType = undefined extends KF \u002F\u002F [!code highlight]\n    ? T \u002F\u002F [!code highlight]\n    : KF extends keyof T\n      ? T[KF]\n      : KF extends ((item: T) => infer K)\n        ? K\n        : never;\n\n  if (!array?.length)\n    return new Map\u003CTKeyType, T>();\n\n  const keyFn: (item: T) => TKeyType\n    = typeof key === 'function'\n      ? key\n      : key !== undefined && typeof array[0] === 'object' && array[0] !== null \u002F\u002F [!code highlight]\n        ? item => item[key as keyof T]\n        : item => item;\n\n  return new Map\u003CTKeyType, T>(array.map(item => [keyFn(item), item]));\n}\n\n\nconst dict = toMap(data);\n\u002F\u002F    ^ const dict: Map\u003CPerson, Person> [!code highlight]\n","5",[306,2082,2083,2088,2093,2103,2109,2113,2150,2154,2166,2178,2182,2186,2191,2206,2213,2226,2238,2265,2272,2281,2285,2299,2318,2322,2344,2356,2362,2400,2418,2429,2433,2465,2469,2473,2477,2489],{"__ignoreMap":21},[309,2084,2085],{"class":311,"line":20},[309,2086,2087],{"class":459},"\u002F\u002F Make the function more flexible - optional parameters allow you to do more",[309,2089,2091],{"class":2090,"line":131},[311,1231],[309,2092,448],{"emptyLinePlaceholder":245},[309,2094,2095,2097,2099,2101],{"class":311,"line":155},[309,2096,768],{"class":314},[309,2098,771],{"class":314},[309,2100,528],{"class":318},[309,2102,973],{"class":322},[309,2104,2105,2107],{"class":311,"line":180},[309,2106,978],{"class":318},[309,2108,1701],{"class":322},[309,2110,2111],{"class":311,"line":204},[309,2112,448],{"emptyLinePlaceholder":245},[309,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2145,2148],{"class":2115,"line":445},[311,1231],[309,2117,1264],{"class":318},[309,2119,1267],{"class":314},[309,2121,1270],{"class":314},[309,2123,800],{"class":318},[309,2125,1275],{"class":314},[309,2127,813],{"class":322},[309,2129,816],{"class":326},[309,2131,330],{"class":314},[309,2133,800],{"class":318},[309,2135,823],{"class":322},[309,2137,826],{"class":314},[309,2139,1734],{"class":333},[309,2141,823],{"class":322},[309,2143,2144],{"class":314},"|",[309,2146,2147],{"class":333}," undefined",[309,2149,337],{"class":322},[309,2151,2152],{"class":311,"line":451},[309,2153,787],{"class":322},[309,2155,2156,2158,2160,2162,2164],{"class":311,"line":456},[309,2157,792],{"class":326},[309,2159,330],{"class":314},[309,2161,797],{"class":314},[309,2163,800],{"class":318},[309,2165,803],{"class":322},[309,2167,2169,2171,2174,2176],{"class":2168,"line":463},[311,1231],[309,2170,1313],{"class":326},[309,2172,2173],{"class":314},"?:",[309,2175,1318],{"class":318},[309,2177,337],{"class":322},[309,2179,2180],{"class":311,"line":41},[309,2181,448],{"emptyLinePlaceholder":245},[309,2183,2184],{"class":311,"line":610},[309,2185,837],{"class":322},[309,2187,2188],{"class":311,"line":616},[309,2189,2190],{"class":459},"  \u002F\u002F - Handle the optional case in your conditional types, by returning T",[309,2192,2194,2196,2198,2200,2202,2204],{"class":2193,"line":621},[311,1231],[309,2195,1339],{"class":314},[309,2197,1342],{"class":318},[309,2199,471],{"class":314},[309,2201,2147],{"class":333},[309,2203,1267],{"class":314},[309,2205,1318],{"class":318},[309,2207,2209,2211],{"class":2208,"line":627},[311,1231],[309,2210,1402],{"class":314},[309,2212,800],{"class":318},[309,2214,2215,2217,2219,2221,2223],{"class":311,"line":655},[309,2216,1410],{"class":314},[309,2218,1318],{"class":318},[309,2220,1267],{"class":314},[309,2222,1270],{"class":314},[309,2224,2225],{"class":318}," T\n",[309,2227,2228,2230,2232,2234,2236],{"class":311,"line":661},[309,2229,1515],{"class":314},[309,2231,800],{"class":318},[309,2233,1363],{"class":322},[309,2235,1366],{"class":318},[309,2237,1577],{"class":322},[309,2239,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262],{"class":311,"line":666},[309,2241,1523],{"class":314},[309,2243,1318],{"class":318},[309,2245,1267],{"class":314},[309,2247,813],{"class":322},[309,2249,816],{"class":326},[309,2251,330],{"class":314},[309,2253,800],{"class":318},[309,2255,823],{"class":322},[309,2257,826],{"class":314},[309,2259,1833],{"class":314},[309,2261,829],{"class":318},[309,2263,2264],{"class":322},")\n",[309,2266,2267,2269],{"class":311,"line":672},[309,2268,1559],{"class":314},[309,2270,2271],{"class":318}," K\n",[309,2273,2274,2276,2278],{"class":311,"line":712},[309,2275,1582],{"class":314},[309,2277,1413],{"class":333},[309,2279,2280],{"class":322},";\n",[309,2282,2283],{"class":311,"line":55},[309,2284,448],{"emptyLinePlaceholder":245},[309,2286,2287,2289,2291,2293,2295,2297],{"class":311,"line":722},[309,2288,842],{"class":314},[309,2290,845],{"class":322},[309,2292,848],{"class":314},[309,2294,851],{"class":322},[309,2296,854],{"class":333},[309,2298,2264],{"class":322},[309,2300,2301,2304,2306,2308,2310,2312,2314,2316],{"class":311,"line":728},[309,2302,2303],{"class":314},"    return",[309,2305,474],{"class":314},[309,2307,477],{"class":318},[309,2309,776],{"class":322},[309,2311,1453],{"class":318},[309,2313,337],{"class":322},[309,2315,779],{"class":318},[309,2317,874],{"class":322},[309,2319,2320],{"class":311,"line":743},[309,2321,448],{"emptyLinePlaceholder":245},[309,2323,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342],{"class":311,"line":1113},[309,2325,1474],{"class":314},[309,2327,1477],{"class":318},[309,2329,330],{"class":314},[309,2331,845],{"class":322},[309,2333,816],{"class":326},[309,2335,330],{"class":314},[309,2337,800],{"class":318},[309,2339,823],{"class":322},[309,2341,826],{"class":314},[309,2343,1928],{"class":318},[309,2345,2346,2348,2350,2352,2354],{"class":311,"line":1118},[309,2347,1498],{"class":314},[309,2349,1501],{"class":314},[309,2351,1504],{"class":322},[309,2353,1507],{"class":314},[309,2355,1510],{"class":393},[309,2357,2358,2360],{"class":311,"line":1123},[309,2359,1515],{"class":314},[309,2361,1518],{"class":322},[309,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397],{"class":2364,"line":1128},[311,1231],[309,2366,1523],{"class":314},[309,2368,1504],{"class":322},[309,2370,1551],{"class":314},[309,2372,2147],{"class":333},[309,2374,1542],{"class":314},[309,2376,1501],{"class":314},[309,2378,1528],{"class":322},[309,2380,1531],{"class":333},[309,2382,1534],{"class":322},[309,2384,1507],{"class":314},[309,2386,1539],{"class":393},[309,2388,1542],{"class":314},[309,2390,1528],{"class":322},[309,2392,1531],{"class":333},[309,2394,1534],{"class":322},[309,2396,1551],{"class":314},[309,2398,2399],{"class":333}," null",[309,2401,2402,2404,2406,2408,2410,2412,2414,2416],{"class":311,"line":1133},[309,2403,1559],{"class":314},[309,2405,1562],{"class":326},[309,2407,491],{"class":314},[309,2409,1567],{"class":322},[309,2411,1570],{"class":314},[309,2413,1270],{"class":314},[309,2415,800],{"class":318},[309,2417,1577],{"class":322},[309,2419,2420,2422,2424,2426],{"class":311,"line":1138},[309,2421,1582],{"class":314},[309,2423,1562],{"class":326},[309,2425,491],{"class":314},[309,2427,2428],{"class":322}," item;\n",[309,2430,2431],{"class":311,"line":69},[309,2432,448],{"emptyLinePlaceholder":245},[309,2434,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463],{"class":311,"line":1147},[309,2436,883],{"class":314},[309,2438,474],{"class":314},[309,2440,477],{"class":318},[309,2442,776],{"class":322},[309,2444,1453],{"class":318},[309,2446,337],{"class":322},[309,2448,779],{"class":318},[309,2450,898],{"class":322},[309,2452,483],{"class":318},[309,2454,405],{"class":322},[309,2456,816],{"class":326},[309,2458,491],{"class":314},[309,2460,909],{"class":322},[309,2462,912],{"class":318},[309,2464,915],{"class":322},[309,2466,2467],{"class":311,"line":244},[309,2468,920],{"class":322},[309,2470,2471],{"class":311,"line":1184},[309,2472,448],{"emptyLinePlaceholder":245},[309,2474,2475],{"class":311,"line":1189},[309,2476,448],{"emptyLinePlaceholder":245},[309,2478,2479,2481,2483,2485,2487],{"class":311,"line":1194},[309,2480,363],{"class":314},[309,2482,468],{"class":333},[309,2484,471],{"class":314},[309,2486,528],{"class":318},[309,2488,740],{"class":322},[309,2490,2491],{"class":311,"line":1213},[309,2492,2493],{"class":459},"\u002F\u002F    ^ const dict: Map\u003CPerson, Person>",[299,2495,2498],{"className":1218,"code":2496,"filename":2497,"language":304,"meta":21,"style":21},"\u002F\u002F Apply what you've learned - add value parameter using the same pattern [!code highlight]\n\nexport function toMap\u003C\n  T,\n  KF extends keyof T | ((item: T) => any) | undefined,\n  KV extends keyof T | ((item: T) => any) | undefined, \u002F\u002F [!code highlight]\n>(\n  array: readonly T[],\n  key?: KF,\n  value?: KV, \u002F\u002F [!code highlight]\n) {\n  type TKeyType = undefined extends KF ? T : KF extends keyof T ? T[KF] : KF extends ((item: T) => infer K) ? K : never;\n\n  type TValueType = undefined extends KV  \u002F\u002F [!code highlight]\n    ? T                                   \u002F\u002F [!code highlight]\n    : KV extends ((item: T) => infer VF)  \u002F\u002F [!code highlight]\n      ? VF                                \u002F\u002F [!code highlight]\n      : KV extends keyof T                \u002F\u002F [!code highlight]\n        ? T[KV]                           \u002F\u002F [!code highlight]\n        : never;                          \u002F\u002F [!code highlight]  \n\n  if (!array?.length)\n    return new Map\u003CTKeyType, TValueType>();\n\n  const keyFn: (item: T) => TKeyType\n    = typeof key === 'function'\n      ? key\n      : key !== undefined && typeof array[0] === 'object' && array[0] !== null\n        ? item => item[key as keyof T]\n        : item => item;\n\n  const valueFn: (item: T) => TValueType                    \u002F\u002F [!code highlight]\n    = typeof value === 'function'                           \u002F\u002F [!code highlight]\n      ? value                                               \u002F\u002F [!code highlight]\n      : value !== undefined && typeof array[0] === 'object' && array[0] !== null   \u002F\u002F [!code highlight]\n        ? item => item[value as keyof T]                    \u002F\u002F [!code highlight]\n        : item => item;                                     \u002F\u002F [!code highlight]\n\n  return new Map\u003CTKeyType, TValueType>(array.map(item => [keyFn(item), valueFn(item)]));\n}\n\nconst dict = toMap(data, 'key', 'birthday');\n\u002F\u002F    ^ const dict: Map\u003Cnumber, Date> [!code highlight]\n","6",[306,2499,2500,2505,2510,2520,2526,2560,2596,2600,2612,2622,2635,2639,2714,2718,2734,2741,2770,2777,2790,2805,2814,2818,2832,2851,2855,2877,2889,2895,2931,2949,2959,2963,2987,3002,3010,3047,3068,3081,3086,3126,3131,3135,3157],{"__ignoreMap":21},[309,2501,2502],{"class":311,"line":20},[309,2503,2504],{"class":459},"\u002F\u002F Apply what you've learned - add value parameter using the same pattern",[309,2506,2508],{"class":2507,"line":131},[311,1231],[309,2509,448],{"emptyLinePlaceholder":245},[309,2511,2512,2514,2516,2518],{"class":311,"line":155},[309,2513,768],{"class":314},[309,2515,771],{"class":314},[309,2517,528],{"class":318},[309,2519,973],{"class":322},[309,2521,2522,2524],{"class":311,"line":180},[309,2523,978],{"class":318},[309,2525,1701],{"class":322},[309,2527,2528,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558],{"class":311,"line":204},[309,2529,1264],{"class":318},[309,2531,1267],{"class":314},[309,2533,1270],{"class":314},[309,2535,800],{"class":318},[309,2537,1275],{"class":314},[309,2539,813],{"class":322},[309,2541,816],{"class":326},[309,2543,330],{"class":314},[309,2545,800],{"class":318},[309,2547,823],{"class":322},[309,2549,826],{"class":314},[309,2551,1734],{"class":333},[309,2553,823],{"class":322},[309,2555,2144],{"class":314},[309,2557,2147],{"class":333},[309,2559,1701],{"class":322},[309,2561,2563,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592,2594],{"class":2562,"line":445},[311,1231],[309,2564,2565],{"class":318},"  KV",[309,2567,1267],{"class":314},[309,2569,1270],{"class":314},[309,2571,800],{"class":318},[309,2573,1275],{"class":314},[309,2575,813],{"class":322},[309,2577,816],{"class":326},[309,2579,330],{"class":314},[309,2581,800],{"class":318},[309,2583,823],{"class":322},[309,2585,826],{"class":314},[309,2587,1734],{"class":333},[309,2589,823],{"class":322},[309,2591,2144],{"class":314},[309,2593,2147],{"class":333},[309,2595,337],{"class":322},[309,2597,2598],{"class":311,"line":451},[309,2599,787],{"class":322},[309,2601,2602,2604,2606,2608,2610],{"class":311,"line":456},[309,2603,792],{"class":326},[309,2605,330],{"class":314},[309,2607,797],{"class":314},[309,2609,800],{"class":318},[309,2611,803],{"class":322},[309,2613,2614,2616,2618,2620],{"class":311,"line":463},[309,2615,1313],{"class":326},[309,2617,2173],{"class":314},[309,2619,1318],{"class":318},[309,2621,1701],{"class":322},[309,2623,2625,2628,2630,2633],{"class":2624,"line":41},[311,1231],[309,2626,2627],{"class":326},"  value",[309,2629,2173],{"class":314},[309,2631,2632],{"class":318}," KV",[309,2634,337],{"class":322},[309,2636,2637],{"class":311,"line":610},[309,2638,837],{"class":322},[309,2640,2641,2643,2645,2647,2649,2651,2653,2656,2658,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2706,2708,2710,2712],{"class":311,"line":616},[309,2642,1339],{"class":314},[309,2644,1342],{"class":318},[309,2646,471],{"class":314},[309,2648,2147],{"class":333},[309,2650,1267],{"class":314},[309,2652,1318],{"class":318},[309,2654,2655],{"class":314}," ?",[309,2657,800],{"class":318},[309,2659,2660],{"class":314}," :",[309,2662,1318],{"class":318},[309,2664,1267],{"class":314},[309,2666,1270],{"class":314},[309,2668,800],{"class":318},[309,2670,2655],{"class":314},[309,2672,800],{"class":318},[309,2674,1363],{"class":322},[309,2676,1366],{"class":318},[309,2678,1534],{"class":322},[309,2680,330],{"class":314},[309,2682,1318],{"class":318},[309,2684,1267],{"class":314},[309,2686,813],{"class":322},[309,2688,816],{"class":326},[309,2690,330],{"class":314},[309,2692,800],{"class":318},[309,2694,823],{"class":322},[309,2696,826],{"class":314},[309,2698,1833],{"class":314},[309,2700,829],{"class":318},[309,2702,823],{"class":322},[309,2704,2705],{"class":314},"?",[309,2707,829],{"class":318},[309,2709,2660],{"class":314},[309,2711,1413],{"class":333},[309,2713,2280],{"class":322},[309,2715,2716],{"class":311,"line":621},[309,2717,448],{"emptyLinePlaceholder":245},[309,2719,2721,2723,2726,2728,2730,2732],{"class":2720,"line":627},[311,1231],[309,2722,1339],{"class":314},[309,2724,2725],{"class":318}," TValueType",[309,2727,471],{"class":314},[309,2729,2147],{"class":333},[309,2731,1267],{"class":314},[309,2733,2632],{"class":318},[309,2735,2737,2739],{"class":2736,"line":655},[311,1231],[309,2738,1402],{"class":314},[309,2740,800],{"class":318},[309,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2767],{"class":2743,"line":661},[311,1231],[309,2745,1410],{"class":314},[309,2747,2632],{"class":318},[309,2749,1267],{"class":314},[309,2751,813],{"class":322},[309,2753,816],{"class":326},[309,2755,330],{"class":314},[309,2757,800],{"class":318},[309,2759,823],{"class":322},[309,2761,826],{"class":314},[309,2763,1833],{"class":314},[309,2765,2766],{"class":318}," VF",[309,2768,2769],{"class":322},")  ",[309,2771,2773,2775],{"class":2772,"line":666},[311,1231],[309,2774,1515],{"class":314},[309,2776,2766],{"class":318},[309,2778,2780,2782,2784,2786,2788],{"class":2779,"line":672},[311,1231],[309,2781,1523],{"class":314},[309,2783,2632],{"class":318},[309,2785,1267],{"class":314},[309,2787,1270],{"class":314},[309,2789,800],{"class":318},[309,2791,2793,2795,2797,2799,2802],{"class":2792,"line":712},[311,1231],[309,2794,1559],{"class":314},[309,2796,800],{"class":318},[309,2798,1363],{"class":322},[309,2800,2801],{"class":318},"KV",[309,2803,2804],{"class":322},"]                           ",[309,2806,2808,2810,2812],{"class":2807,"line":55},[311,1231],[309,2809,1582],{"class":314},[309,2811,1413],{"class":333},[309,2813,1416],{"class":322},[309,2815,2816],{"class":311,"line":722},[309,2817,448],{"emptyLinePlaceholder":245},[309,2819,2820,2822,2824,2826,2828,2830],{"class":311,"line":728},[309,2821,842],{"class":314},[309,2823,845],{"class":322},[309,2825,848],{"class":314},[309,2827,851],{"class":322},[309,2829,854],{"class":333},[309,2831,2264],{"class":322},[309,2833,2834,2836,2838,2840,2842,2844,2846,2849],{"class":311,"line":743},[309,2835,2303],{"class":314},[309,2837,474],{"class":314},[309,2839,477],{"class":318},[309,2841,776],{"class":322},[309,2843,1453],{"class":318},[309,2845,337],{"class":322},[309,2847,2848],{"class":318},"TValueType",[309,2850,874],{"class":322},[309,2852,2853],{"class":311,"line":1113},[309,2854,448],{"emptyLinePlaceholder":245},[309,2856,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875],{"class":311,"line":1118},[309,2858,1474],{"class":314},[309,2860,1477],{"class":318},[309,2862,330],{"class":314},[309,2864,845],{"class":322},[309,2866,816],{"class":326},[309,2868,330],{"class":314},[309,2870,800],{"class":318},[309,2872,823],{"class":322},[309,2874,826],{"class":314},[309,2876,1928],{"class":318},[309,2878,2879,2881,2883,2885,2887],{"class":311,"line":1123},[309,2880,1498],{"class":314},[309,2882,1501],{"class":314},[309,2884,1504],{"class":322},[309,2886,1507],{"class":314},[309,2888,1510],{"class":393},[309,2890,2891,2893],{"class":311,"line":1128},[309,2892,1515],{"class":314},[309,2894,1518],{"class":322},[309,2896,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929],{"class":311,"line":1133},[309,2898,1523],{"class":314},[309,2900,1504],{"class":322},[309,2902,1551],{"class":314},[309,2904,2147],{"class":333},[309,2906,1542],{"class":314},[309,2908,1501],{"class":314},[309,2910,1528],{"class":322},[309,2912,1531],{"class":333},[309,2914,1534],{"class":322},[309,2916,1507],{"class":314},[309,2918,1539],{"class":393},[309,2920,1542],{"class":314},[309,2922,1528],{"class":322},[309,2924,1531],{"class":333},[309,2926,1534],{"class":322},[309,2928,1551],{"class":314},[309,2930,1554],{"class":333},[309,2932,2933,2935,2937,2939,2941,2943,2945,2947],{"class":311,"line":1138},[309,2934,1559],{"class":314},[309,2936,1562],{"class":326},[309,2938,491],{"class":314},[309,2940,1567],{"class":322},[309,2942,1570],{"class":314},[309,2944,1270],{"class":314},[309,2946,800],{"class":318},[309,2948,1577],{"class":322},[309,2950,2951,2953,2955,2957],{"class":311,"line":69},[309,2952,1582],{"class":314},[309,2954,1562],{"class":326},[309,2956,491],{"class":314},[309,2958,2428],{"class":322},[309,2960,2961],{"class":311,"line":1147},[309,2962,448],{"emptyLinePlaceholder":245},[309,2964,2966,2968,2971,2973,2975,2977,2979,2981,2983,2985],{"class":2965,"line":244},[311,1231],[309,2967,1474],{"class":314},[309,2969,2970],{"class":318}," valueFn",[309,2972,330],{"class":314},[309,2974,845],{"class":322},[309,2976,816],{"class":326},[309,2978,330],{"class":314},[309,2980,800],{"class":318},[309,2982,823],{"class":322},[309,2984,826],{"class":314},[309,2986,2725],{"class":318},[309,2988,2990,2992,2994,2997,2999],{"class":2989,"line":1184},[311,1231],[309,2991,1498],{"class":314},[309,2993,1501],{"class":314},[309,2995,2996],{"class":322}," value ",[309,2998,1507],{"class":314},[309,3000,3001],{"class":393}," 'function'",[309,3003,3005,3007],{"class":3004,"line":1189},[311,1231],[309,3006,1515],{"class":314},[309,3008,3009],{"class":322}," value                                               ",[309,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045],{"class":3012,"line":1194},[311,1231],[309,3014,1523],{"class":314},[309,3016,2996],{"class":322},[309,3018,1551],{"class":314},[309,3020,2147],{"class":333},[309,3022,1542],{"class":314},[309,3024,1501],{"class":314},[309,3026,1528],{"class":322},[309,3028,1531],{"class":333},[309,3030,1534],{"class":322},[309,3032,1507],{"class":314},[309,3034,1539],{"class":393},[309,3036,1542],{"class":314},[309,3038,1528],{"class":322},[309,3040,1531],{"class":333},[309,3042,1534],{"class":322},[309,3044,1551],{"class":314},[309,3046,2399],{"class":333},[309,3048,3050,3052,3054,3056,3059,3061,3063,3065],{"class":3049,"line":1213},[311,1231],[309,3051,1559],{"class":314},[309,3053,1562],{"class":326},[309,3055,491],{"class":314},[309,3057,3058],{"class":322}," item[value ",[309,3060,1570],{"class":314},[309,3062,1270],{"class":314},[309,3064,800],{"class":318},[309,3066,3067],{"class":322},"]                    ",[309,3069,3072,3074,3076,3078],{"class":3070,"line":3071},[311,1231],37,[309,3073,1582],{"class":314},[309,3075,1562],{"class":326},[309,3077,491],{"class":314},[309,3079,3080],{"class":322}," item;                                     ",[309,3082,3084],{"class":311,"line":3083},38,[309,3085,448],{"emptyLinePlaceholder":245},[309,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3120,3123],{"class":311,"line":3088},39,[309,3090,883],{"class":314},[309,3092,474],{"class":314},[309,3094,477],{"class":318},[309,3096,776],{"class":322},[309,3098,1453],{"class":318},[309,3100,337],{"class":322},[309,3102,2848],{"class":318},[309,3104,898],{"class":322},[309,3106,483],{"class":318},[309,3108,405],{"class":322},[309,3110,816],{"class":326},[309,3112,491],{"class":314},[309,3114,909],{"class":322},[309,3116,912],{"class":318},[309,3118,3119],{"class":322},"(item), ",[309,3121,3122],{"class":318},"valueFn",[309,3124,3125],{"class":322},"(item)]));\n",[309,3127,3129],{"class":311,"line":3128},40,[309,3130,920],{"class":322},[309,3132,3133],{"class":311,"line":265},[309,3134,448],{"emptyLinePlaceholder":245},[309,3136,3138,3140,3142,3144,3146,3148,3150,3152,3155],{"class":311,"line":3137},42,[309,3139,363],{"class":314},[309,3141,468],{"class":333},[309,3143,471],{"class":314},[309,3145,528],{"class":318},[309,3147,531],{"class":322},[309,3149,534],{"class":393},[309,3151,337],{"class":322},[309,3153,3154],{"class":393},"'birthday'",[309,3156,537],{"class":322},[309,3158,3160],{"class":311,"line":3159},43,[309,3161,3162],{"class":459},"\u002F\u002F    ^ const dict: Map\u003Cnumber, Date>",[299,3164,3167],{"className":301,"code":3165,"filename":3166,"language":304,"meta":21,"style":21},"\u002F\u002F Your final result - a powerful, type-safe utility you can use anywhere\n\u002F**\n * Helps to create a map (dictionary) from a list of items.\n * For the key and values you can either provide a keyof T or a function that returns the value.\n * If you don't specify any value, the whole item will be used as value.\n * @param array the array to convert\n * @param key a keyof an array item | a function that returns a value that represents the key of the dictionary\n * @param value a keyof an array item | a function that returns any value\n * @returns an new Map()\n *\u002F\nexport function toMap\u003C\n  T,\n  KF extends keyof T | ((item: T) => any) | undefined,\n  KV extends keyof T | ((item: T) => any) | undefined,\n>(\n  array: readonly T[],\n  key?: KF,\n  value?: KV,\n) {\n  type TKeyType = undefined extends KF ? T : KF extends keyof T ? T[KF] : KF extends ((item: T) => infer K) ? K : never;\n  type TValueType = undefined extends KV ? T : KV extends ((item: T) => infer VF) ? VF : KV extends keyof T ? T[KV] : never;\n\n  if (!array?.length)\n    return new Map\u003CTKeyType, TValueType>();\n\n  const keyFn: (item: T) => TKeyType\n    = typeof key === 'function'\n      ? key\n      : key !== undefined && typeof array[0] === 'object' && array[0] !== null\n        ? item => item[key as keyof T]\n        : item => item;\n\n  const valueFn: (item: T) => TValueType\n    = typeof value === 'function'\n      ? value\n      : value !== undefined && typeof array[0] === 'object' && array[0] !== null\n        ? item => item[value as keyof T]\n        : item => item;\n\n  \u002F\u002F Create the map and loop the array only once\n  const map = new Map\u003CTKeyType, TValueType>();\n  array.forEach((item) => {\n    map.set(keyFn(item), valueFn(item));\n  });\n\n  return map;\n}\n\nconst dict = toMap(data, 'key', x => x.birthday);\n\u002F\u002F    ^ const dict: Map\u003Cnumber, Date>\n","toMap.ts",[306,3168,3169,3174,3179,3184,3189,3194,3208,3220,3232,3242,3247,3257,3263,3297,3331,3335,3347,3357,3367,3371,3443,3515,3519,3533,3551,3555,3577,3589,3595,3631,3649,3659,3663,3686,3698,3705,3741,3759,3769,3773,3778,3801,3821,3840,3846,3851,3859,3864,3869,3892],{"__ignoreMap":21},[309,3170,3171],{"class":311,"line":20},[309,3172,3173],{"class":459},"\u002F\u002F Your final result - a powerful, type-safe utility you can use anywhere\n",[309,3175,3176],{"class":311,"line":131},[309,3177,3178],{"class":459},"\u002F**\n",[309,3180,3181],{"class":311,"line":155},[309,3182,3183],{"class":459}," * Helps to create a map (dictionary) from a list of items.\n",[309,3185,3186],{"class":311,"line":180},[309,3187,3188],{"class":459}," * For the key and values you can either provide a keyof T or a function that returns the value.\n",[309,3190,3191],{"class":311,"line":204},[309,3192,3193],{"class":459}," * If you don't specify any value, the whole item will be used as value.\n",[309,3195,3196,3199,3202,3205],{"class":311,"line":445},[309,3197,3198],{"class":459}," * ",[309,3200,3201],{"class":314},"@param",[309,3203,3204],{"class":322}," array",[309,3206,3207],{"class":459}," the array to convert\n",[309,3209,3210,3212,3214,3217],{"class":311,"line":451},[309,3211,3198],{"class":459},[309,3213,3201],{"class":314},[309,3215,3216],{"class":322}," key",[309,3218,3219],{"class":459}," a keyof an array item | a function that returns a value that represents the key of the dictionary\n",[309,3221,3222,3224,3226,3229],{"class":311,"line":456},[309,3223,3198],{"class":459},[309,3225,3201],{"class":314},[309,3227,3228],{"class":322}," value",[309,3230,3231],{"class":459}," a keyof an array item | a function that returns any value\n",[309,3233,3234,3236,3239],{"class":311,"line":463},[309,3235,3198],{"class":459},[309,3237,3238],{"class":314},"@returns",[309,3240,3241],{"class":459}," an new Map()\n",[309,3243,3244],{"class":311,"line":41},[309,3245,3246],{"class":459}," *\u002F\n",[309,3248,3249,3251,3253,3255],{"class":311,"line":610},[309,3250,768],{"class":314},[309,3252,771],{"class":314},[309,3254,528],{"class":318},[309,3256,973],{"class":322},[309,3258,3259,3261],{"class":311,"line":616},[309,3260,978],{"class":318},[309,3262,1701],{"class":322},[309,3264,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295],{"class":311,"line":621},[309,3266,1264],{"class":318},[309,3268,1267],{"class":314},[309,3270,1270],{"class":314},[309,3272,800],{"class":318},[309,3274,1275],{"class":314},[309,3276,813],{"class":322},[309,3278,816],{"class":326},[309,3280,330],{"class":314},[309,3282,800],{"class":318},[309,3284,823],{"class":322},[309,3286,826],{"class":314},[309,3288,1734],{"class":333},[309,3290,823],{"class":322},[309,3292,2144],{"class":314},[309,3294,2147],{"class":333},[309,3296,1701],{"class":322},[309,3298,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329],{"class":311,"line":627},[309,3300,2565],{"class":318},[309,3302,1267],{"class":314},[309,3304,1270],{"class":314},[309,3306,800],{"class":318},[309,3308,1275],{"class":314},[309,3310,813],{"class":322},[309,3312,816],{"class":326},[309,3314,330],{"class":314},[309,3316,800],{"class":318},[309,3318,823],{"class":322},[309,3320,826],{"class":314},[309,3322,1734],{"class":333},[309,3324,823],{"class":322},[309,3326,2144],{"class":314},[309,3328,2147],{"class":333},[309,3330,1701],{"class":322},[309,3332,3333],{"class":311,"line":655},[309,3334,787],{"class":322},[309,3336,3337,3339,3341,3343,3345],{"class":311,"line":661},[309,3338,792],{"class":326},[309,3340,330],{"class":314},[309,3342,797],{"class":314},[309,3344,800],{"class":318},[309,3346,803],{"class":322},[309,3348,3349,3351,3353,3355],{"class":311,"line":666},[309,3350,1313],{"class":326},[309,3352,2173],{"class":314},[309,3354,1318],{"class":318},[309,3356,1701],{"class":322},[309,3358,3359,3361,3363,3365],{"class":311,"line":672},[309,3360,2627],{"class":326},[309,3362,2173],{"class":314},[309,3364,2632],{"class":318},[309,3366,1701],{"class":322},[309,3368,3369],{"class":311,"line":712},[309,3370,837],{"class":322},[309,3372,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441],{"class":311,"line":55},[309,3374,1339],{"class":314},[309,3376,1342],{"class":318},[309,3378,471],{"class":314},[309,3380,2147],{"class":333},[309,3382,1267],{"class":314},[309,3384,1318],{"class":318},[309,3386,2655],{"class":314},[309,3388,800],{"class":318},[309,3390,2660],{"class":314},[309,3392,1318],{"class":318},[309,3394,1267],{"class":314},[309,3396,1270],{"class":314},[309,3398,800],{"class":318},[309,3400,2655],{"class":314},[309,3402,800],{"class":318},[309,3404,1363],{"class":322},[309,3406,1366],{"class":318},[309,3408,1534],{"class":322},[309,3410,330],{"class":314},[309,3412,1318],{"class":318},[309,3414,1267],{"class":314},[309,3416,813],{"class":322},[309,3418,816],{"class":326},[309,3420,330],{"class":314},[309,3422,800],{"class":318},[309,3424,823],{"class":322},[309,3426,826],{"class":314},[309,3428,1833],{"class":314},[309,3430,829],{"class":318},[309,3432,823],{"class":322},[309,3434,2705],{"class":314},[309,3436,829],{"class":318},[309,3438,2660],{"class":314},[309,3440,1413],{"class":333},[309,3442,2280],{"class":322},[309,3444,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513],{"class":311,"line":722},[309,3446,1339],{"class":314},[309,3448,2725],{"class":318},[309,3450,471],{"class":314},[309,3452,2147],{"class":333},[309,3454,1267],{"class":314},[309,3456,2632],{"class":318},[309,3458,2655],{"class":314},[309,3460,800],{"class":318},[309,3462,2660],{"class":314},[309,3464,2632],{"class":318},[309,3466,1267],{"class":314},[309,3468,813],{"class":322},[309,3470,816],{"class":326},[309,3472,330],{"class":314},[309,3474,800],{"class":318},[309,3476,823],{"class":322},[309,3478,826],{"class":314},[309,3480,1833],{"class":314},[309,3482,2766],{"class":318},[309,3484,823],{"class":322},[309,3486,2705],{"class":314},[309,3488,2766],{"class":318},[309,3490,2660],{"class":314},[309,3492,2632],{"class":318},[309,3494,1267],{"class":314},[309,3496,1270],{"class":314},[309,3498,800],{"class":318},[309,3500,2655],{"class":314},[309,3502,800],{"class":318},[309,3504,1363],{"class":322},[309,3506,2801],{"class":318},[309,3508,1534],{"class":322},[309,3510,330],{"class":314},[309,3512,1413],{"class":333},[309,3514,2280],{"class":322},[309,3516,3517],{"class":311,"line":728},[309,3518,448],{"emptyLinePlaceholder":245},[309,3520,3521,3523,3525,3527,3529,3531],{"class":311,"line":743},[309,3522,842],{"class":314},[309,3524,845],{"class":322},[309,3526,848],{"class":314},[309,3528,851],{"class":322},[309,3530,854],{"class":333},[309,3532,2264],{"class":322},[309,3534,3535,3537,3539,3541,3543,3545,3547,3549],{"class":311,"line":1113},[309,3536,2303],{"class":314},[309,3538,474],{"class":314},[309,3540,477],{"class":318},[309,3542,776],{"class":322},[309,3544,1453],{"class":318},[309,3546,337],{"class":322},[309,3548,2848],{"class":318},[309,3550,874],{"class":322},[309,3552,3553],{"class":311,"line":1118},[309,3554,448],{"emptyLinePlaceholder":245},[309,3556,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575],{"class":311,"line":1123},[309,3558,1474],{"class":314},[309,3560,1477],{"class":318},[309,3562,330],{"class":314},[309,3564,845],{"class":322},[309,3566,816],{"class":326},[309,3568,330],{"class":314},[309,3570,800],{"class":318},[309,3572,823],{"class":322},[309,3574,826],{"class":314},[309,3576,1928],{"class":318},[309,3578,3579,3581,3583,3585,3587],{"class":311,"line":1128},[309,3580,1498],{"class":314},[309,3582,1501],{"class":314},[309,3584,1504],{"class":322},[309,3586,1507],{"class":314},[309,3588,1510],{"class":393},[309,3590,3591,3593],{"class":311,"line":1133},[309,3592,1515],{"class":314},[309,3594,1518],{"class":322},[309,3596,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629],{"class":311,"line":1138},[309,3598,1523],{"class":314},[309,3600,1504],{"class":322},[309,3602,1551],{"class":314},[309,3604,2147],{"class":333},[309,3606,1542],{"class":314},[309,3608,1501],{"class":314},[309,3610,1528],{"class":322},[309,3612,1531],{"class":333},[309,3614,1534],{"class":322},[309,3616,1507],{"class":314},[309,3618,1539],{"class":393},[309,3620,1542],{"class":314},[309,3622,1528],{"class":322},[309,3624,1531],{"class":333},[309,3626,1534],{"class":322},[309,3628,1551],{"class":314},[309,3630,1554],{"class":333},[309,3632,3633,3635,3637,3639,3641,3643,3645,3647],{"class":311,"line":69},[309,3634,1559],{"class":314},[309,3636,1562],{"class":326},[309,3638,491],{"class":314},[309,3640,1567],{"class":322},[309,3642,1570],{"class":314},[309,3644,1270],{"class":314},[309,3646,800],{"class":318},[309,3648,1577],{"class":322},[309,3650,3651,3653,3655,3657],{"class":311,"line":1147},[309,3652,1582],{"class":314},[309,3654,1562],{"class":326},[309,3656,491],{"class":314},[309,3658,2428],{"class":322},[309,3660,3661],{"class":311,"line":244},[309,3662,448],{"emptyLinePlaceholder":245},[309,3664,3665,3667,3669,3671,3673,3675,3677,3679,3681,3683],{"class":311,"line":1184},[309,3666,1474],{"class":314},[309,3668,2970],{"class":318},[309,3670,330],{"class":314},[309,3672,845],{"class":322},[309,3674,816],{"class":326},[309,3676,330],{"class":314},[309,3678,800],{"class":318},[309,3680,823],{"class":322},[309,3682,826],{"class":314},[309,3684,3685],{"class":318}," TValueType\n",[309,3687,3688,3690,3692,3694,3696],{"class":311,"line":1189},[309,3689,1498],{"class":314},[309,3691,1501],{"class":314},[309,3693,2996],{"class":322},[309,3695,1507],{"class":314},[309,3697,1510],{"class":393},[309,3699,3700,3702],{"class":311,"line":1194},[309,3701,1515],{"class":314},[309,3703,3704],{"class":322}," value\n",[309,3706,3707,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727,3729,3731,3733,3735,3737,3739],{"class":311,"line":1213},[309,3708,1523],{"class":314},[309,3710,2996],{"class":322},[309,3712,1551],{"class":314},[309,3714,2147],{"class":333},[309,3716,1542],{"class":314},[309,3718,1501],{"class":314},[309,3720,1528],{"class":322},[309,3722,1531],{"class":333},[309,3724,1534],{"class":322},[309,3726,1507],{"class":314},[309,3728,1539],{"class":393},[309,3730,1542],{"class":314},[309,3732,1528],{"class":322},[309,3734,1531],{"class":333},[309,3736,1534],{"class":322},[309,3738,1551],{"class":314},[309,3740,1554],{"class":333},[309,3742,3743,3745,3747,3749,3751,3753,3755,3757],{"class":311,"line":3071},[309,3744,1559],{"class":314},[309,3746,1562],{"class":326},[309,3748,491],{"class":314},[309,3750,3058],{"class":322},[309,3752,1570],{"class":314},[309,3754,1270],{"class":314},[309,3756,800],{"class":318},[309,3758,1577],{"class":322},[309,3760,3761,3763,3765,3767],{"class":311,"line":3083},[309,3762,1582],{"class":314},[309,3764,1562],{"class":326},[309,3766,491],{"class":314},[309,3768,2428],{"class":322},[309,3770,3771],{"class":311,"line":3088},[309,3772,448],{"emptyLinePlaceholder":245},[309,3774,3775],{"class":311,"line":3128},[309,3776,3777],{"class":459},"  \u002F\u002F Create the map and loop the array only once\n",[309,3779,3780,3782,3785,3787,3789,3791,3793,3795,3797,3799],{"class":311,"line":265},[309,3781,1474],{"class":314},[309,3783,3784],{"class":333}," map",[309,3786,471],{"class":314},[309,3788,474],{"class":314},[309,3790,477],{"class":318},[309,3792,776],{"class":322},[309,3794,1453],{"class":318},[309,3796,337],{"class":322},[309,3798,2848],{"class":318},[309,3800,874],{"class":322},[309,3802,3803,3806,3809,3812,3814,3816,3818],{"class":311,"line":3137},[309,3804,3805],{"class":322},"  array.",[309,3807,3808],{"class":318},"forEach",[309,3810,3811],{"class":322},"((",[309,3813,816],{"class":326},[309,3815,823],{"class":322},[309,3817,826],{"class":314},[309,3819,3820],{"class":322}," {\n",[309,3822,3823,3826,3829,3831,3833,3835,3837],{"class":311,"line":3159},[309,3824,3825],{"class":322},"    map.",[309,3827,3828],{"class":318},"set",[309,3830,405],{"class":322},[309,3832,912],{"class":318},[309,3834,3119],{"class":322},[309,3836,3122],{"class":318},[309,3838,3839],{"class":322},"(item));\n",[309,3841,3843],{"class":311,"line":3842},44,[309,3844,3845],{"class":322},"  });\n",[309,3847,3849],{"class":311,"line":3848},45,[309,3850,448],{"emptyLinePlaceholder":245},[309,3852,3854,3856],{"class":311,"line":3853},46,[309,3855,883],{"class":314},[309,3857,3858],{"class":322}," map;\n",[309,3860,3862],{"class":311,"line":3861},47,[309,3863,920],{"class":322},[309,3865,3867],{"class":311,"line":3866},48,[309,3868,448],{"emptyLinePlaceholder":245},[309,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890],{"class":311,"line":3871},49,[309,3873,363],{"class":314},[309,3875,468],{"class":333},[309,3877,471],{"class":314},[309,3879,528],{"class":318},[309,3881,531],{"class":322},[309,3883,534],{"class":393},[309,3885,337],{"class":322},[309,3887,488],{"class":326},[309,3889,491],{"class":314},[309,3891,943],{"class":322},[309,3893,3895],{"class":311,"line":3894},50,[309,3896,3897],{"class":459},"\u002F\u002F    ^ const dict: Map\u003Cnumber, Date>\n",[231,3899,3900,3901,702],{},"Want to see how thoroughly this function is tested? Check out the full test file here ",[3902,3903,3907],"a",{"href":3904,"rel":3905},"https:\u002F\u002Fgithub.com\u002Fjeroenbach\u002Fbach.software\u002Fblob\u002Fmain\u002Fsrc\u002Fapp\u002Futils\u002FtoMap.test.ts",[3906],"nofollow","toMap.tests.ts",[3909,3910,3912],"h3",{"id":3911},"working-with-strictnullchecks-disabled","Working with strictNullChecks disabled",[231,3914,3915,3916,3918,3919,702],{},"When strictNullChecks is disabled (or strict mode itself is disabled), undefined becomes assignable to all types, which breaks our conditional type.\nIn this scenario, regardless of the parameters passed to ",[306,3917,505],{},", the resulting map will always have the key and value types ",[306,3920,779],{},[231,3922,3923],{},"To handle this limitation, you can use function overloads to provide explicit type signatures that correspond to the different parameter combinations, ensuring\ntype safety even when strict null checks ar disabled.",[231,3925,3926],{},"Here's how you can implement this:",[751,3928,3929],{},[299,3930,3932],{"className":301,"code":3931,"filename":3166,"language":304,"meta":21,"style":21},"\u002F**\n * Helps to create a map (dictionary) from a list of items.\n * For the key and values you can either provide a keyof T or a function that returns the value.\n * If you don't specify any value, the whole item will be used as value.\n *\n * @param array the array to convert\n * @param key a keyof an array item | a function that returns a value that represents the key of the dictionary\n * @param value a keyof an array item | a function that returns any value\n * @returns an new Map()\n *\u002F\nexport function toMap\u003CT>(array: readonly T[]): Map\u003CT, T>;\nexport function toMap\u003CT, KF extends keyof T>(\n  array: readonly T[],\n  key: KF,\n): Map\u003CT[KF], T>;\nexport function toMap\u003CT, KF extends (item: T) => any>(\n  array: readonly T[],\n  key: KF,\n): Map\u003CReturnType\u003CKF>, T>;\nexport function toMap\u003CT, KF extends keyof T, VF extends keyof T>(\n  array: readonly T[],\n  key: KF,\n  value: VF,\n): Map\u003CT[KF], T[VF]>;\nexport function toMap\u003CT, KF extends keyof T, VF extends (item: T) => any>(\n  array: readonly T[],\n  key: KF,\n  value: VF,\n): Map\u003CT[KF], ReturnType\u003CVF>>;\nexport function toMap\u003C\n  T,\n  KF extends (item: T) => any,\n  VF extends (item: T) => any,\n>(\n  array: readonly T[],\n  key?: KF,\n  value?: VF,\n): Map\u003CReturnType\u003CKF>, ReturnType\u003CVF>>;\nexport function toMap\u003CT, KF extends (item: T) => any, VF extends keyof T>(\n  array: readonly T[],\n  key: KF,\n  value: VF,\n): Map\u003CReturnType\u003CKF>, T[VF]>;\n\nexport function toMap\u003C\n  T,\n  KF extends keyof T | ((item: T) => any) | undefined,\n  KV extends keyof T | ((item: T) => any) | undefined,\n>(array: readonly T[], key?: KF, value?: KV) {\n  type TKeyType = undefined extends KV\n    ? T\n    : KF extends keyof T\n      ? T[KF]\n      : KF extends (item: T) => infer K\n        ? K\n        : never;\n  type TValueType = undefined extends KV\n    ? T\n    : KV extends (item: T) => infer VF\n      ? VF\n      : KV extends keyof T\n        ? T[KV]\n        : never;\n\n  if (!array?.length) return new Map\u003CTKeyType, TValueType>();\n\n  const keyFn: (item: T) => TKeyType =\n    typeof key === 'function'\n      ? key\n      : key !== undefined && typeof array[0] === 'object' && array[0] !== null\n        ? item => item[key as keyof T]\n        : item => item;\n\n  const valueFn: (item: T) => TValueType =\n    typeof value === 'function'\n      ? value\n      : value !== undefined && typeof array[0] === 'object' && array[0] !== null\n        ? item => item[value as keyof T]\n        : item => item;\n\n  \u002F\u002F Create the map and loop the array only once\n  const map = new Map\u003CTKeyType, TValueType>();\n  array?.forEach(item => {\n    map.set(keyFn(item), valueFn(item));\n  });\n\n  return map;\n}\n\n",[306,3933,3934,3938,3942,3946,3950,3955,3965,3975,3985,3993,3997,4039,4063,4075,4085,4109,4143,4155,4165,4189,4224,4236,4246,4256,4283,4327,4339,4349,4359,4386,4396,4402,4424,4447,4451,4463,4473,4483,4509,4553,4565,4575,4585,4611,4615,4625,4631,4665,4699,4731,4746,4753,4766,4779,4804,4811,4820,4835,4842,4868,4875,4888,4901,4910,4915,4946,4951,4977,4989,4996,5033,5052,5063,5068,5093,5104,5111,5148,5167,5178,5183,5188,5211,5227,5244,5249,5254,5261],{"__ignoreMap":21},[309,3935,3936],{"class":311,"line":20},[309,3937,3178],{"class":459},[309,3939,3940],{"class":311,"line":131},[309,3941,3183],{"class":459},[309,3943,3944],{"class":311,"line":155},[309,3945,3188],{"class":459},[309,3947,3948],{"class":311,"line":180},[309,3949,3193],{"class":459},[309,3951,3952],{"class":311,"line":204},[309,3953,3954],{"class":459}," *\n",[309,3956,3957,3959,3961,3963],{"class":311,"line":445},[309,3958,3198],{"class":459},[309,3960,3201],{"class":314},[309,3962,3204],{"class":322},[309,3964,3207],{"class":459},[309,3966,3967,3969,3971,3973],{"class":311,"line":451},[309,3968,3198],{"class":459},[309,3970,3201],{"class":314},[309,3972,3216],{"class":322},[309,3974,3219],{"class":459},[309,3976,3977,3979,3981,3983],{"class":311,"line":456},[309,3978,3198],{"class":459},[309,3980,3201],{"class":314},[309,3982,3228],{"class":322},[309,3984,3231],{"class":459},[309,3986,3987,3989,3991],{"class":311,"line":463},[309,3988,3198],{"class":459},[309,3990,3238],{"class":314},[309,3992,3241],{"class":459},[309,3994,3995],{"class":311,"line":41},[309,3996,3246],{"class":459},[309,3998,3999,4001,4003,4005,4007,4009,4012,4015,4017,4019,4021,4024,4026,4028,4030,4032,4034,4036],{"class":311,"line":610},[309,4000,768],{"class":314},[309,4002,771],{"class":314},[309,4004,528],{"class":318},[309,4006,776],{"class":322},[309,4008,779],{"class":318},[309,4010,4011],{"class":322},">(",[309,4013,4014],{"class":326},"array",[309,4016,330],{"class":314},[309,4018,797],{"class":314},[309,4020,800],{"class":318},[309,4022,4023],{"class":322},"[])",[309,4025,330],{"class":314},[309,4027,477],{"class":318},[309,4029,776],{"class":322},[309,4031,779],{"class":318},[309,4033,337],{"class":322},[309,4035,779],{"class":318},[309,4037,4038],{"class":322},">;\n",[309,4040,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061],{"class":311,"line":616},[309,4042,768],{"class":314},[309,4044,771],{"class":314},[309,4046,528],{"class":318},[309,4048,776],{"class":322},[309,4050,779],{"class":318},[309,4052,337],{"class":322},[309,4054,1366],{"class":318},[309,4056,1267],{"class":314},[309,4058,1270],{"class":314},[309,4060,800],{"class":318},[309,4062,787],{"class":322},[309,4064,4065,4067,4069,4071,4073],{"class":311,"line":621},[309,4066,792],{"class":326},[309,4068,330],{"class":314},[309,4070,797],{"class":314},[309,4072,800],{"class":318},[309,4074,803],{"class":322},[309,4076,4077,4079,4081,4083],{"class":311,"line":627},[309,4078,1313],{"class":326},[309,4080,330],{"class":314},[309,4082,1318],{"class":318},[309,4084,1701],{"class":322},[309,4086,4087,4090,4092,4094,4096,4098,4100,4102,4105,4107],{"class":311,"line":655},[309,4088,4089],{"class":322},")",[309,4091,330],{"class":314},[309,4093,477],{"class":318},[309,4095,776],{"class":322},[309,4097,779],{"class":318},[309,4099,1363],{"class":322},[309,4101,1366],{"class":318},[309,4103,4104],{"class":322},"], ",[309,4106,779],{"class":318},[309,4108,4038],{"class":322},[309,4110,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141],{"class":311,"line":661},[309,4112,768],{"class":314},[309,4114,771],{"class":314},[309,4116,528],{"class":318},[309,4118,776],{"class":322},[309,4120,779],{"class":318},[309,4122,337],{"class":322},[309,4124,1366],{"class":318},[309,4126,1267],{"class":314},[309,4128,845],{"class":322},[309,4130,816],{"class":326},[309,4132,330],{"class":314},[309,4134,800],{"class":318},[309,4136,823],{"class":322},[309,4138,826],{"class":314},[309,4140,1734],{"class":333},[309,4142,787],{"class":322},[309,4144,4145,4147,4149,4151,4153],{"class":311,"line":666},[309,4146,792],{"class":326},[309,4148,330],{"class":314},[309,4150,797],{"class":314},[309,4152,800],{"class":318},[309,4154,803],{"class":322},[309,4156,4157,4159,4161,4163],{"class":311,"line":672},[309,4158,1313],{"class":326},[309,4160,330],{"class":314},[309,4162,1318],{"class":318},[309,4164,1701],{"class":322},[309,4166,4167,4169,4171,4173,4175,4178,4180,4182,4185,4187],{"class":311,"line":712},[309,4168,4089],{"class":322},[309,4170,330],{"class":314},[309,4172,477],{"class":318},[309,4174,776],{"class":322},[309,4176,4177],{"class":318},"ReturnType",[309,4179,776],{"class":322},[309,4181,1366],{"class":318},[309,4183,4184],{"class":322},">, ",[309,4186,779],{"class":318},[309,4188,4038],{"class":322},[309,4190,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4216,4218,4220,4222],{"class":311,"line":55},[309,4192,768],{"class":314},[309,4194,771],{"class":314},[309,4196,528],{"class":318},[309,4198,776],{"class":322},[309,4200,779],{"class":318},[309,4202,337],{"class":322},[309,4204,1366],{"class":318},[309,4206,1267],{"class":314},[309,4208,1270],{"class":314},[309,4210,800],{"class":318},[309,4212,337],{"class":322},[309,4214,4215],{"class":318},"VF",[309,4217,1267],{"class":314},[309,4219,1270],{"class":314},[309,4221,800],{"class":318},[309,4223,787],{"class":322},[309,4225,4226,4228,4230,4232,4234],{"class":311,"line":722},[309,4227,792],{"class":326},[309,4229,330],{"class":314},[309,4231,797],{"class":314},[309,4233,800],{"class":318},[309,4235,803],{"class":322},[309,4237,4238,4240,4242,4244],{"class":311,"line":728},[309,4239,1313],{"class":326},[309,4241,330],{"class":314},[309,4243,1318],{"class":318},[309,4245,1701],{"class":322},[309,4247,4248,4250,4252,4254],{"class":311,"line":743},[309,4249,2627],{"class":326},[309,4251,330],{"class":314},[309,4253,2766],{"class":318},[309,4255,1701],{"class":322},[309,4257,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280],{"class":311,"line":1113},[309,4259,4089],{"class":322},[309,4261,330],{"class":314},[309,4263,477],{"class":318},[309,4265,776],{"class":322},[309,4267,779],{"class":318},[309,4269,1363],{"class":322},[309,4271,1366],{"class":318},[309,4273,4104],{"class":322},[309,4275,779],{"class":318},[309,4277,1363],{"class":322},[309,4279,4215],{"class":318},[309,4281,4282],{"class":322},"]>;\n",[309,4284,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321,4323,4325],{"class":311,"line":1118},[309,4286,768],{"class":314},[309,4288,771],{"class":314},[309,4290,528],{"class":318},[309,4292,776],{"class":322},[309,4294,779],{"class":318},[309,4296,337],{"class":322},[309,4298,1366],{"class":318},[309,4300,1267],{"class":314},[309,4302,1270],{"class":314},[309,4304,800],{"class":318},[309,4306,337],{"class":322},[309,4308,4215],{"class":318},[309,4310,1267],{"class":314},[309,4312,845],{"class":322},[309,4314,816],{"class":326},[309,4316,330],{"class":314},[309,4318,800],{"class":318},[309,4320,823],{"class":322},[309,4322,826],{"class":314},[309,4324,1734],{"class":333},[309,4326,787],{"class":322},[309,4328,4329,4331,4333,4335,4337],{"class":311,"line":1123},[309,4330,792],{"class":326},[309,4332,330],{"class":314},[309,4334,797],{"class":314},[309,4336,800],{"class":318},[309,4338,803],{"class":322},[309,4340,4341,4343,4345,4347],{"class":311,"line":1128},[309,4342,1313],{"class":326},[309,4344,330],{"class":314},[309,4346,1318],{"class":318},[309,4348,1701],{"class":322},[309,4350,4351,4353,4355,4357],{"class":311,"line":1133},[309,4352,2627],{"class":326},[309,4354,330],{"class":314},[309,4356,2766],{"class":318},[309,4358,1701],{"class":322},[309,4360,4361,4363,4365,4367,4369,4371,4373,4375,4377,4379,4381,4383],{"class":311,"line":1138},[309,4362,4089],{"class":322},[309,4364,330],{"class":314},[309,4366,477],{"class":318},[309,4368,776],{"class":322},[309,4370,779],{"class":318},[309,4372,1363],{"class":322},[309,4374,1366],{"class":318},[309,4376,4104],{"class":322},[309,4378,4177],{"class":318},[309,4380,776],{"class":322},[309,4382,4215],{"class":318},[309,4384,4385],{"class":322},">>;\n",[309,4387,4388,4390,4392,4394],{"class":311,"line":69},[309,4389,768],{"class":314},[309,4391,771],{"class":314},[309,4393,528],{"class":318},[309,4395,973],{"class":322},[309,4397,4398,4400],{"class":311,"line":1147},[309,4399,978],{"class":318},[309,4401,1701],{"class":322},[309,4403,4404,4406,4408,4410,4412,4414,4416,4418,4420,4422],{"class":311,"line":244},[309,4405,1264],{"class":318},[309,4407,1267],{"class":314},[309,4409,845],{"class":322},[309,4411,816],{"class":326},[309,4413,330],{"class":314},[309,4415,800],{"class":318},[309,4417,823],{"class":322},[309,4419,826],{"class":314},[309,4421,1734],{"class":333},[309,4423,1701],{"class":322},[309,4425,4426,4429,4431,4433,4435,4437,4439,4441,4443,4445],{"class":311,"line":1184},[309,4427,4428],{"class":318},"  VF",[309,4430,1267],{"class":314},[309,4432,845],{"class":322},[309,4434,816],{"class":326},[309,4436,330],{"class":314},[309,4438,800],{"class":318},[309,4440,823],{"class":322},[309,4442,826],{"class":314},[309,4444,1734],{"class":333},[309,4446,1701],{"class":322},[309,4448,4449],{"class":311,"line":1189},[309,4450,787],{"class":322},[309,4452,4453,4455,4457,4459,4461],{"class":311,"line":1194},[309,4454,792],{"class":326},[309,4456,330],{"class":314},[309,4458,797],{"class":314},[309,4460,800],{"class":318},[309,4462,803],{"class":322},[309,4464,4465,4467,4469,4471],{"class":311,"line":1213},[309,4466,1313],{"class":326},[309,4468,2173],{"class":314},[309,4470,1318],{"class":318},[309,4472,1701],{"class":322},[309,4474,4475,4477,4479,4481],{"class":311,"line":3071},[309,4476,2627],{"class":326},[309,4478,2173],{"class":314},[309,4480,2766],{"class":318},[309,4482,1701],{"class":322},[309,4484,4485,4487,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507],{"class":311,"line":3083},[309,4486,4089],{"class":322},[309,4488,330],{"class":314},[309,4490,477],{"class":318},[309,4492,776],{"class":322},[309,4494,4177],{"class":318},[309,4496,776],{"class":322},[309,4498,1366],{"class":318},[309,4500,4184],{"class":322},[309,4502,4177],{"class":318},[309,4504,776],{"class":322},[309,4506,4215],{"class":318},[309,4508,4385],{"class":322},[309,4510,4511,4513,4515,4517,4519,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551],{"class":311,"line":3088},[309,4512,768],{"class":314},[309,4514,771],{"class":314},[309,4516,528],{"class":318},[309,4518,776],{"class":322},[309,4520,779],{"class":318},[309,4522,337],{"class":322},[309,4524,1366],{"class":318},[309,4526,1267],{"class":314},[309,4528,845],{"class":322},[309,4530,816],{"class":326},[309,4532,330],{"class":314},[309,4534,800],{"class":318},[309,4536,823],{"class":322},[309,4538,826],{"class":314},[309,4540,1734],{"class":333},[309,4542,337],{"class":322},[309,4544,4215],{"class":318},[309,4546,1267],{"class":314},[309,4548,1270],{"class":314},[309,4550,800],{"class":318},[309,4552,787],{"class":322},[309,4554,4555,4557,4559,4561,4563],{"class":311,"line":3128},[309,4556,792],{"class":326},[309,4558,330],{"class":314},[309,4560,797],{"class":314},[309,4562,800],{"class":318},[309,4564,803],{"class":322},[309,4566,4567,4569,4571,4573],{"class":311,"line":265},[309,4568,1313],{"class":326},[309,4570,330],{"class":314},[309,4572,1318],{"class":318},[309,4574,1701],{"class":322},[309,4576,4577,4579,4581,4583],{"class":311,"line":3137},[309,4578,2627],{"class":326},[309,4580,330],{"class":314},[309,4582,2766],{"class":318},[309,4584,1701],{"class":322},[309,4586,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609],{"class":311,"line":3159},[309,4588,4089],{"class":322},[309,4590,330],{"class":314},[309,4592,477],{"class":318},[309,4594,776],{"class":322},[309,4596,4177],{"class":318},[309,4598,776],{"class":322},[309,4600,1366],{"class":318},[309,4602,4184],{"class":322},[309,4604,779],{"class":318},[309,4606,1363],{"class":322},[309,4608,4215],{"class":318},[309,4610,4282],{"class":322},[309,4612,4613],{"class":311,"line":3842},[309,4614,448],{"emptyLinePlaceholder":245},[309,4616,4617,4619,4621,4623],{"class":311,"line":3848},[309,4618,768],{"class":314},[309,4620,771],{"class":314},[309,4622,528],{"class":318},[309,4624,973],{"class":322},[309,4626,4627,4629],{"class":311,"line":3853},[309,4628,978],{"class":318},[309,4630,1701],{"class":322},[309,4632,4633,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661,4663],{"class":311,"line":3861},[309,4634,1264],{"class":318},[309,4636,1267],{"class":314},[309,4638,1270],{"class":314},[309,4640,800],{"class":318},[309,4642,1275],{"class":314},[309,4644,813],{"class":322},[309,4646,816],{"class":326},[309,4648,330],{"class":314},[309,4650,800],{"class":318},[309,4652,823],{"class":322},[309,4654,826],{"class":314},[309,4656,1734],{"class":333},[309,4658,823],{"class":322},[309,4660,2144],{"class":314},[309,4662,2147],{"class":333},[309,4664,1701],{"class":322},[309,4666,4667,4669,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695,4697],{"class":311,"line":3866},[309,4668,2565],{"class":318},[309,4670,1267],{"class":314},[309,4672,1270],{"class":314},[309,4674,800],{"class":318},[309,4676,1275],{"class":314},[309,4678,813],{"class":322},[309,4680,816],{"class":326},[309,4682,330],{"class":314},[309,4684,800],{"class":318},[309,4686,823],{"class":322},[309,4688,826],{"class":314},[309,4690,1734],{"class":333},[309,4692,823],{"class":322},[309,4694,2144],{"class":314},[309,4696,2147],{"class":333},[309,4698,1701],{"class":322},[309,4700,4701,4703,4705,4707,4709,4711,4714,4716,4718,4720,4722,4725,4727,4729],{"class":311,"line":3871},[309,4702,4011],{"class":322},[309,4704,4014],{"class":326},[309,4706,330],{"class":314},[309,4708,797],{"class":314},[309,4710,800],{"class":318},[309,4712,4713],{"class":322},"[], ",[309,4715,327],{"class":326},[309,4717,2173],{"class":314},[309,4719,1318],{"class":318},[309,4721,337],{"class":322},[309,4723,4724],{"class":326},"value",[309,4726,2173],{"class":314},[309,4728,2632],{"class":318},[309,4730,837],{"class":322},[309,4732,4733,4735,4737,4739,4741,4743],{"class":311,"line":3894},[309,4734,1339],{"class":314},[309,4736,1342],{"class":318},[309,4738,471],{"class":314},[309,4740,2147],{"class":333},[309,4742,1267],{"class":314},[309,4744,4745],{"class":318}," KV\n",[309,4747,4749,4751],{"class":311,"line":4748},51,[309,4750,1402],{"class":314},[309,4752,2225],{"class":318},[309,4754,4756,4758,4760,4762,4764],{"class":311,"line":4755},52,[309,4757,1410],{"class":314},[309,4759,1318],{"class":318},[309,4761,1267],{"class":314},[309,4763,1270],{"class":314},[309,4765,2225],{"class":318},[309,4767,4769,4771,4773,4775,4777],{"class":311,"line":4768},53,[309,4770,1515],{"class":314},[309,4772,800],{"class":318},[309,4774,1363],{"class":322},[309,4776,1366],{"class":318},[309,4778,1577],{"class":322},[309,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798,4800,4802],{"class":311,"line":4781},54,[309,4783,1523],{"class":314},[309,4785,1318],{"class":318},[309,4787,1267],{"class":314},[309,4789,845],{"class":322},[309,4791,816],{"class":326},[309,4793,330],{"class":314},[309,4795,800],{"class":318},[309,4797,823],{"class":322},[309,4799,826],{"class":314},[309,4801,1833],{"class":314},[309,4803,2271],{"class":318},[309,4805,4807,4809],{"class":311,"line":4806},55,[309,4808,1559],{"class":314},[309,4810,2271],{"class":318},[309,4812,4814,4816,4818],{"class":311,"line":4813},56,[309,4815,1582],{"class":314},[309,4817,1413],{"class":333},[309,4819,2280],{"class":322},[309,4821,4823,4825,4827,4829,4831,4833],{"class":311,"line":4822},57,[309,4824,1339],{"class":314},[309,4826,2725],{"class":318},[309,4828,471],{"class":314},[309,4830,2147],{"class":333},[309,4832,1267],{"class":314},[309,4834,4745],{"class":318},[309,4836,4838,4840],{"class":311,"line":4837},58,[309,4839,1402],{"class":314},[309,4841,2225],{"class":318},[309,4843,4845,4847,4849,4851,4853,4855,4857,4859,4861,4863,4865],{"class":311,"line":4844},59,[309,4846,1410],{"class":314},[309,4848,2632],{"class":318},[309,4850,1267],{"class":314},[309,4852,845],{"class":322},[309,4854,816],{"class":326},[309,4856,330],{"class":314},[309,4858,800],{"class":318},[309,4860,823],{"class":322},[309,4862,826],{"class":314},[309,4864,1833],{"class":314},[309,4866,4867],{"class":318}," VF\n",[309,4869,4871,4873],{"class":311,"line":4870},60,[309,4872,1515],{"class":314},[309,4874,4867],{"class":318},[309,4876,4878,4880,4882,4884,4886],{"class":311,"line":4877},61,[309,4879,1523],{"class":314},[309,4881,2632],{"class":318},[309,4883,1267],{"class":314},[309,4885,1270],{"class":314},[309,4887,2225],{"class":318},[309,4889,4891,4893,4895,4897,4899],{"class":311,"line":4890},62,[309,4892,1559],{"class":314},[309,4894,800],{"class":318},[309,4896,1363],{"class":322},[309,4898,2801],{"class":318},[309,4900,1577],{"class":322},[309,4902,4904,4906,4908],{"class":311,"line":4903},63,[309,4905,1582],{"class":314},[309,4907,1413],{"class":333},[309,4909,2280],{"class":322},[309,4911,4913],{"class":311,"line":4912},64,[309,4914,448],{"emptyLinePlaceholder":245},[309,4916,4918,4920,4922,4924,4926,4928,4930,4932,4934,4936,4938,4940,4942,4944],{"class":311,"line":4917},65,[309,4919,842],{"class":314},[309,4921,845],{"class":322},[309,4923,848],{"class":314},[309,4925,851],{"class":322},[309,4927,854],{"class":333},[309,4929,823],{"class":322},[309,4931,859],{"class":314},[309,4933,474],{"class":314},[309,4935,477],{"class":318},[309,4937,776],{"class":322},[309,4939,1453],{"class":318},[309,4941,337],{"class":322},[309,4943,2848],{"class":318},[309,4945,874],{"class":322},[309,4947,4949],{"class":311,"line":4948},66,[309,4950,448],{"emptyLinePlaceholder":245},[309,4952,4954,4956,4958,4960,4962,4964,4966,4968,4970,4972,4974],{"class":311,"line":4953},67,[309,4955,1474],{"class":314},[309,4957,1477],{"class":318},[309,4959,330],{"class":314},[309,4961,845],{"class":322},[309,4963,816],{"class":326},[309,4965,330],{"class":314},[309,4967,800],{"class":318},[309,4969,823],{"class":322},[309,4971,826],{"class":314},[309,4973,1342],{"class":318},[309,4975,4976],{"class":314}," =\n",[309,4978,4980,4983,4985,4987],{"class":311,"line":4979},68,[309,4981,4982],{"class":314},"    typeof",[309,4984,1504],{"class":322},[309,4986,1507],{"class":314},[309,4988,1510],{"class":393},[309,4990,4992,4994],{"class":311,"line":4991},69,[309,4993,1515],{"class":314},[309,4995,1518],{"class":322},[309,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015,5017,5019,5021,5023,5025,5027,5029,5031],{"class":311,"line":4998},70,[309,5000,1523],{"class":314},[309,5002,1504],{"class":322},[309,5004,1551],{"class":314},[309,5006,2147],{"class":333},[309,5008,1542],{"class":314},[309,5010,1501],{"class":314},[309,5012,1528],{"class":322},[309,5014,1531],{"class":333},[309,5016,1534],{"class":322},[309,5018,1507],{"class":314},[309,5020,1539],{"class":393},[309,5022,1542],{"class":314},[309,5024,1528],{"class":322},[309,5026,1531],{"class":333},[309,5028,1534],{"class":322},[309,5030,1551],{"class":314},[309,5032,1554],{"class":333},[309,5034,5036,5038,5040,5042,5044,5046,5048,5050],{"class":311,"line":5035},71,[309,5037,1559],{"class":314},[309,5039,1562],{"class":326},[309,5041,491],{"class":314},[309,5043,1567],{"class":322},[309,5045,1570],{"class":314},[309,5047,1270],{"class":314},[309,5049,800],{"class":318},[309,5051,1577],{"class":322},[309,5053,5055,5057,5059,5061],{"class":311,"line":5054},72,[309,5056,1582],{"class":314},[309,5058,1562],{"class":326},[309,5060,491],{"class":314},[309,5062,2428],{"class":322},[309,5064,5066],{"class":311,"line":5065},73,[309,5067,448],{"emptyLinePlaceholder":245},[309,5069,5071,5073,5075,5077,5079,5081,5083,5085,5087,5089,5091],{"class":311,"line":5070},74,[309,5072,1474],{"class":314},[309,5074,2970],{"class":318},[309,5076,330],{"class":314},[309,5078,845],{"class":322},[309,5080,816],{"class":326},[309,5082,330],{"class":314},[309,5084,800],{"class":318},[309,5086,823],{"class":322},[309,5088,826],{"class":314},[309,5090,2725],{"class":318},[309,5092,4976],{"class":314},[309,5094,5096,5098,5100,5102],{"class":311,"line":5095},75,[309,5097,4982],{"class":314},[309,5099,2996],{"class":322},[309,5101,1507],{"class":314},[309,5103,1510],{"class":393},[309,5105,5107,5109],{"class":311,"line":5106},76,[309,5108,1515],{"class":314},[309,5110,3704],{"class":322},[309,5112,5114,5116,5118,5120,5122,5124,5126,5128,5130,5132,5134,5136,5138,5140,5142,5144,5146],{"class":311,"line":5113},77,[309,5115,1523],{"class":314},[309,5117,2996],{"class":322},[309,5119,1551],{"class":314},[309,5121,2147],{"class":333},[309,5123,1542],{"class":314},[309,5125,1501],{"class":314},[309,5127,1528],{"class":322},[309,5129,1531],{"class":333},[309,5131,1534],{"class":322},[309,5133,1507],{"class":314},[309,5135,1539],{"class":393},[309,5137,1542],{"class":314},[309,5139,1528],{"class":322},[309,5141,1531],{"class":333},[309,5143,1534],{"class":322},[309,5145,1551],{"class":314},[309,5147,1554],{"class":333},[309,5149,5151,5153,5155,5157,5159,5161,5163,5165],{"class":311,"line":5150},78,[309,5152,1559],{"class":314},[309,5154,1562],{"class":326},[309,5156,491],{"class":314},[309,5158,3058],{"class":322},[309,5160,1570],{"class":314},[309,5162,1270],{"class":314},[309,5164,800],{"class":318},[309,5166,1577],{"class":322},[309,5168,5170,5172,5174,5176],{"class":311,"line":5169},79,[309,5171,1582],{"class":314},[309,5173,1562],{"class":326},[309,5175,491],{"class":314},[309,5177,2428],{"class":322},[309,5179,5181],{"class":311,"line":5180},80,[309,5182,448],{"emptyLinePlaceholder":245},[309,5184,5186],{"class":311,"line":5185},81,[309,5187,3777],{"class":459},[309,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207,5209],{"class":311,"line":5190},82,[309,5192,1474],{"class":314},[309,5194,3784],{"class":333},[309,5196,471],{"class":314},[309,5198,474],{"class":314},[309,5200,477],{"class":318},[309,5202,776],{"class":322},[309,5204,1453],{"class":318},[309,5206,337],{"class":322},[309,5208,2848],{"class":318},[309,5210,874],{"class":322},[309,5212,5214,5217,5219,5221,5223,5225],{"class":311,"line":5213},83,[309,5215,5216],{"class":322},"  array?.",[309,5218,3808],{"class":318},[309,5220,405],{"class":322},[309,5222,816],{"class":326},[309,5224,491],{"class":314},[309,5226,3820],{"class":322},[309,5228,5230,5232,5234,5236,5238,5240,5242],{"class":311,"line":5229},84,[309,5231,3825],{"class":322},[309,5233,3828],{"class":318},[309,5235,405],{"class":322},[309,5237,912],{"class":318},[309,5239,3119],{"class":322},[309,5241,3122],{"class":318},[309,5243,3839],{"class":322},[309,5245,5247],{"class":311,"line":5246},85,[309,5248,3845],{"class":322},[309,5250,5252],{"class":311,"line":5251},86,[309,5253,448],{"emptyLinePlaceholder":245},[309,5255,5257,5259],{"class":311,"line":5256},87,[309,5258,883],{"class":314},[309,5260,3858],{"class":322},[309,5262,5264],{"class":311,"line":5263},88,[309,5265,920],{"class":322},[5267,5268,5270],"h2",{"id":5269},"what-youve-accomplished","What You've Accomplished",[231,5272,5273,5274,5276,5277,5280],{},"You've transformed a simple one-liner into a powerful, reusable utility! While your ",[306,5275,505],{}," function is more complex than ",[306,5278,5279],{},"new Map(data.map(x => [x.key, x]))",", you've gained:",[5282,5283,5284,5295,5301,5307],"ul",{},[5285,5286,5287,5291,5292],"li",{},[5288,5289,5290],"strong",{},"Better readability"," - Your intent is crystal clear when you write ",[306,5293,5294],{},"toMap(users, 'id')",[5285,5296,5297,5300],{},[5288,5298,5299],{},"Type safety"," - Full TypeScript inference protects you from runtime errors",[5285,5302,5303,5306],{},[5288,5304,5305],{},"Flexibility"," - Support for both property names and custom functions",[5285,5308,5309,5312],{},[5288,5310,5311],{},"Reusability"," - One function handles all your array-to-dictionary needs",[231,5314,5315],{},"You've also learned some advanced TypeScript concepts that you can apply to other projects: conditional types, type inference, and building flexible APIs. These skills will make you a more effective TypeScript developer.",[5317,5318,5319],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":21,"searchDepth":131,"depth":131,"links":5321},[5322,5323],{"id":3911,"depth":155,"text":3912},{"id":5269,"depth":131,"text":5270},"Typescript","2025-09-27T21:00:00","Helper functions to convert an array to a map (dictionary) in Typescript with type safety.",{"type":228,"value":5328},[5329],[231,5330,294],{},"object-top","\u002Fposts\u002F5\u002Fcover.png",[5324,5334],"Javascript",{},{"text":5337,"minutes":5338,"time":5339,"words":5340},"11 min read",10.78,646800,2156,{"title":201,"description":5326},"LwTjVbjqhubvcs_1ly0YIORdkNtcUiM_8lduvdgkAQ4",{"id":272,"company":5344,"extension":277,"fullName":278,"github":279,"homePage":280,"imageUrl":276,"linkedIn":281,"meta":5345,"role":283,"stem":284,"twitter":285,"userName":286,"__hash__":287},{"name":274,"url":275,"imageUrl":276},{},1781641709303]