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