[{"data":1,"prerenderedAt":438},["ShallowReactive",2],{"pagesContext-en-2":3,"navigation-en":32,"pagesContext-en-3":42,"authorsContext-en-jeroenbach":63,"content-urls":80,"pagesContext-en-10":288,"postsContext-en-undefined-true":311},{"id":4,"title":5,"body":6,"canonicalUrl":17,"company":17,"contentId":15,"dateModified":17,"datePublished":17,"description":12,"draft":18,"enableProse":18,"excludeFromNavigation":18,"extension":19,"imageAlt":17,"imageUrl":17,"meta":20,"navigation":26,"partial":26,"path":27,"seo":28,"slug":17,"stem":29,"url":30,"__hash__":31},"pages_en\u002Fcontent\u002F_footer.md","About Jeroen Bach",{"type":7,"value":8,"toc":13},"minimark",[9],[10,11,12],"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":14,"searchDepth":15,"depth":15,"links":16},"",2,[],null,false,"md",{"readingTime":21},{"text":22,"minutes":23,"time":24,"words":25},"1 min read",0.16,9600,32,true,"\u002Fcontent\u002F_footer",{"title":5,"description":12},"content\u002F_footer","\u002Fcontent\u002F2-about-jeroen-bach","tgPfOB73xkNtsI3Ers_EH08FHEHR7ko45cqNiVgrM0s",[33,36,39],{"label":34,"to":35},"Blog","\u002Fposts",{"label":37,"to":38},"Portfolio","\u002Fcontent\u002F20-portfolio",{"label":40,"to":41},"About","\u002Fcontent\u002F30-about",{"id":43,"title":44,"body":45,"canonicalUrl":17,"company":17,"contentId":52,"dateModified":17,"datePublished":17,"description":49,"draft":18,"enableProse":18,"excludeFromNavigation":18,"extension":19,"imageAlt":17,"imageUrl":17,"meta":53,"navigation":26,"partial":26,"path":58,"seo":59,"slug":17,"stem":60,"url":61,"__hash__":62},"pages_en\u002Fcontent\u002F_footer-about.md","Footer About",{"type":7,"value":46,"toc":50},[47],[10,48,49],{},"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":14,"searchDepth":15,"depth":15,"links":51},[],3,{"readingTime":54},{"text":22,"minutes":55,"time":56,"words":57},0.205,12300,41,"\u002Fcontent\u002F_footer-about",{"description":49},"content\u002F_footer-about","\u002Fcontent\u002F3-footer-about","49ofD3QAU2eKgnsoCR9zQhGEP7EECAsjUJeOHSF1GJI",{"id":64,"company":65,"extension":69,"fullName":70,"github":71,"homePage":72,"imageUrl":68,"linkedIn":73,"meta":74,"role":75,"stem":76,"twitter":77,"userName":78,"__hash__":79},"authors_en\u002Fauthors\u002Fjeroenbach.yaml",{"name":66,"url":67,"imageUrl":68},"Bach.Software","https:\u002F\u002Fbach.software","\u002FJEROEN-_A7R5652-HD-SQUARE-zoom.jpg","yaml","Jeroen Bach","https:\u002F\u002Fgithub.com\u002Fjeroenbach","https:\u002F\u002Fbach.software\u002Fpages\u002Fabout","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fjeroenbach\u002F",{},"Software Engineer \u002F Team Lead","authors\u002Fjeroenbach","https:\u002F\u002Fx.com\u002Fjeroenbach","jeroenbach","QjQ1vpL_EQbLZNaZdDNOjIkS-thm6oxHuAdoNIauNI8",{"page":81,"blogPost":167,"blog":287},{"1":82,"10":103,"20":117,"30":131,"404":148},{"en":83,"fr":91,"nl":94,"de":97,"es":100},{"title":84,"path":85,"stem":86,"contentId":87,"url":14,"dateModified":88,"locale":89,"type":90},"Home","\u002Fcontent\u002Fhome","content\u002F1.home",1,"2025-11-02T18:00:00","en","page",{"title":84,"path":85,"stem":86,"contentId":87,"url":92,"dateModified":88,"locale":93,"type":90},"\u002Ffr","fr",{"title":84,"path":85,"stem":86,"contentId":87,"url":95,"dateModified":88,"locale":96,"type":90},"\u002Fnl","nl",{"title":84,"path":85,"stem":86,"contentId":87,"url":98,"dateModified":88,"locale":99,"type":90},"\u002Fde","de",{"title":84,"path":85,"stem":86,"contentId":87,"url":101,"dateModified":88,"locale":102,"type":90},"\u002Fes","es",{"en":104,"fr":109,"nl":111,"de":113,"es":115},{"title":34,"path":105,"stem":106,"contentId":107,"url":35,"dateModified":108,"locale":89,"type":90},"\u002Fcontent\u002Fposts","content\u002F10.posts",10,"2025-10-26T18:00:00",{"title":34,"path":105,"stem":106,"contentId":107,"url":110,"dateModified":108,"locale":93,"type":90},"\u002Ffr\u002Farticles",{"title":34,"path":105,"stem":106,"contentId":107,"url":112,"dateModified":108,"locale":96,"type":90},"\u002Fnl\u002Fposts",{"title":34,"path":105,"stem":106,"contentId":107,"url":114,"dateModified":108,"locale":99,"type":90},"\u002Fde\u002Fposts",{"title":34,"path":105,"stem":106,"contentId":107,"url":116,"dateModified":108,"locale":102,"type":90},"\u002Fes\u002Farticulos",{"en":118,"fr":122,"nl":124,"de":126,"es":128},{"title":37,"path":119,"stem":120,"contentId":121,"url":38,"dateModified":108,"locale":89,"type":90},"\u002Fcontent\u002Fportfolio","content\u002F20.portfolio",20,{"title":37,"path":119,"stem":120,"contentId":121,"url":123,"dateModified":108,"locale":93,"type":90},"\u002Ffr\u002Fcontent\u002F20-portfolio",{"title":37,"path":119,"stem":120,"contentId":121,"url":125,"dateModified":108,"locale":96,"type":90},"\u002Fnl\u002Fcontent\u002F20-portfolio",{"title":37,"path":119,"stem":120,"contentId":121,"url":127,"dateModified":108,"locale":99,"type":90},"\u002Fde\u002Fcontent\u002F20-portfolio",{"title":129,"path":119,"stem":120,"contentId":121,"url":130,"dateModified":108,"locale":102,"type":90},"Portafolio","\u002Fes\u002Fcontent\u002F20-portafolio",{"en":132,"fr":136,"nl":139,"de":142,"es":145},{"title":40,"path":133,"stem":134,"contentId":135,"url":41,"dateModified":108,"locale":89,"type":90},"\u002Fcontent\u002Fabout","content\u002F30.about",30,{"title":137,"path":133,"stem":134,"contentId":135,"url":138,"dateModified":108,"locale":93,"type":90},"À propos","\u002Ffr\u002Fcontent\u002F30-a-propos",{"title":140,"path":133,"stem":134,"contentId":135,"url":141,"dateModified":108,"locale":96,"type":90},"Over","\u002Fnl\u002Fcontent\u002F30-over",{"title":143,"path":133,"stem":134,"contentId":135,"url":144,"dateModified":108,"locale":99,"type":90},"Über mich","\u002Fde\u002Fcontent\u002F30-uber-mich",{"title":146,"path":133,"stem":134,"contentId":135,"url":147,"dateModified":108,"locale":102,"type":90},"Acerca de","\u002Fes\u002Fcontent\u002F30-acerca-de",{"en":149,"fr":155,"nl":158,"de":161,"es":164},{"title":150,"path":151,"stem":152,"contentId":153,"url":154,"dateModified":88,"locale":89,"type":90},"Page not found","\u002Fcontent\u002Fpage-not-found","content\u002F404.page-not-found",404,"\u002Fcontent\u002F404-page-not-found",{"title":156,"path":151,"stem":152,"contentId":153,"url":157,"dateModified":88,"locale":93,"type":90},"Page non trouvée","\u002Ffr\u002Fcontent\u002F404-page-non-trouvee",{"title":159,"path":151,"stem":152,"contentId":153,"url":160,"dateModified":88,"locale":96,"type":90},"Pagina niet gevonden","\u002Fnl\u002Fcontent\u002F404-pagina-niet-gevonden",{"title":162,"path":151,"stem":152,"contentId":153,"url":163,"dateModified":88,"locale":99,"type":90},"Seite nicht gefunden","\u002Fde\u002Fcontent\u002F404-seite-nicht-gefunden",{"title":165,"path":151,"stem":152,"contentId":153,"url":166,"dateModified":88,"locale":102,"type":90},"Página no encontrada","\u002Fes\u002Fcontent\u002F404-pagina-no-encontrada",{"1":168,"2":192,"3":215,"4":239,"5":263},{"en":169,"fr":176,"nl":181,"de":184,"es":187},{"title":170,"path":171,"stem":172,"contentId":87,"dateModified":173,"url":174,"locale":89,"type":175},"Mastering Conditional Property Types with Vue 3.3 Generics","\u002Fposts\u002F1","posts\u002F1","2025-05-27T11:30:00","\u002Fposts\u002F1-mastering-conditional-property-types-with-vue-3_3-generics","blogPost",{"title":177,"path":178,"stem":179,"contentId":87,"dateModified":173,"url":180,"locale":93,"type":175},"Maîtriser les types de propriétés conditionnelles avec les génériques de Vue 3.3","\u002Farticles\u002F1","articles\u002F1","\u002Ffr\u002Farticles\u002F1-maitriser-les-types-de-proprietes-conditionnelles-avec-les-generiques-de-vue-3_3",{"title":182,"path":171,"stem":172,"contentId":87,"dateModified":173,"url":183,"locale":96,"type":175},"Conditionele Property Types beheersen met Vue 3.3 Generics","\u002Fnl\u002Fposts\u002F1-conditionele-property-types-beheersen-met-vue-3_3-generics",{"title":185,"path":171,"stem":172,"contentId":87,"dateModified":173,"url":186,"locale":99,"type":175},"Bedingte Property-Typen mit Vue 3.3 Generics meistern","\u002Fde\u002Fposts\u002F1-bedingte-property-typen-mit-vue-3_3-generics-meistern",{"title":188,"path":189,"stem":190,"contentId":87,"dateModified":173,"url":191,"locale":102,"type":175},"Dominar los tipos de propiedades condicionales con genéricos de Vue 3.3","\u002Farticulos\u002F1","articulos\u002F1","\u002Fes\u002Farticulos\u002F1-dominar-los-tipos-de-propiedades-condicionales-con-genericos-de-vue-3_3",{"en":193,"fr":199,"nl":204,"de":207,"es":210},{"title":194,"path":195,"stem":196,"contentId":15,"dateModified":197,"url":198,"locale":89,"type":175},"Ditching the Cookie Banners: Run Plausible Analytics on Azure Kubernetes","\u002Fposts\u002F2","posts\u002F2","2025-10-04T13:00:00","\u002Fposts\u002F2-ditching-the-cookie-banners:-run-plausible-analytics-on-azure-kubernetes",{"title":200,"path":201,"stem":202,"contentId":15,"dateModified":197,"url":203,"locale":93,"type":175},"Éliminer les bannières de cookies: Exécutez Plausible Analytics sur Azure Kubernetes","\u002Farticles\u002F2","articles\u002F2","\u002Ffr\u002Farticles\u002F2-eliminer-les-bannieres-de-cookies:-executez-plausible-analytics-sur-azure-kubernetes",{"title":205,"path":195,"stem":196,"contentId":15,"dateModified":197,"url":206,"locale":96,"type":175},"Afscheid van Cookie Banners: Draai Plausible Analytics op Azure Kubernetes","\u002Fnl\u002Fposts\u002F2-afscheid-van-cookie-banners:-draai-plausible-analytics-op-azure-kubernetes",{"title":208,"path":195,"stem":196,"contentId":15,"dateModified":197,"url":209,"locale":99,"type":175},"Abschied von Cookie-Bannern: Plausible Analytics auf Azure Kubernetes betreiben","\u002Fde\u002Fposts\u002F2-abschied-von-cookie-bannern:-plausible-analytics-auf-azure-kubernetes-betreiben",{"title":211,"path":212,"stem":213,"contentId":15,"dateModified":197,"url":214,"locale":102,"type":175},"Eliminar los banners de cookies: Ejecuta Plausible Analytics en Azure Kubernetes","\u002Farticulos\u002F2","articulos\u002F2","\u002Fes\u002Farticulos\u002F2-eliminar-los-banners-de-cookies:-ejecuta-plausible-analytics-en-azure-kubernetes",{"en":216,"fr":222,"nl":228,"de":231,"es":234},{"title":217,"path":218,"stem":219,"contentId":52,"dateModified":220,"url":221,"locale":89,"type":175},"Track how many people read your articles, using Plausible.io, Vue.js and Azure functions","\u002Fposts\u002F3","posts\u002F3","2025-08-03T15:45:00","\u002Fposts\u002F3-track-how-many-people-read-your-articles-using-plausible_io-vue_js-and-azure-functions",{"title":223,"path":224,"stem":225,"contentId":52,"dateModified":226,"url":227,"locale":93,"type":175},"Suivez combien de personnes lisent vos articles, en utilisant Plausible.io, Vue.js et Azure Functions","\u002Farticles\u002F3","articles\u002F3","2025-08-15:45:00","\u002Ffr\u002Farticles\u002F3-suivez-combien-de-personnes-lisent-vos-articles-en-utilisant-plausible_io-vue_js-et-azure-functions",{"title":229,"path":218,"stem":219,"contentId":52,"dateModified":220,"url":230,"locale":96,"type":175},"Volg hoeveel mensen je artikelen lezen, met Plausible.io, Vue.js en Azure functions","\u002Fnl\u002Fposts\u002F3-volg-hoeveel-mensen-je-artikelen-lezen-met-plausible_io-vue_js-en-azure-functions",{"title":232,"path":218,"stem":219,"contentId":52,"dateModified":220,"url":233,"locale":99,"type":175},"Verfolgen Sie, wie viele Menschen Ihre Artikel lesen, mit Plausible.io, Vue.js und Azure Functions","\u002Fde\u002Fposts\u002F3-verfolgen-sie-wie-viele-menschen-ihre-artikel-lesen-mit-plausible_io-vue_js-und-azure-functions",{"title":235,"path":236,"stem":237,"contentId":52,"dateModified":220,"url":238,"locale":102,"type":175},"Rastrea cuántas personas leen tus artículos, usando Plausible.io, Vue.js y funciones de Azure","\u002Farticulos\u002F3","articulos\u002F3","\u002Fes\u002Farticulos\u002F3-rastrea-cuantas-personas-leen-tus-articulos-usando-plausible_io-vue_js-y-funciones-de-azure",{"en":240,"fr":247,"nl":252,"de":255,"es":258},{"title":241,"path":242,"stem":243,"contentId":244,"dateModified":245,"url":246,"locale":89,"type":175},"Deploy a production-ready Kubernetes Cluster on Azure with Terraform","\u002Fposts\u002F4","posts\u002F4",4,"2025-12-06T21:00:00","\u002Fposts\u002F4-deploy-a-production-ready-kubernetes-cluster-on-azure-with-terraform",{"title":248,"path":249,"stem":250,"contentId":244,"dateModified":245,"url":251,"locale":93,"type":175},"Déployer un cluster Kubernetes prêt pour la production sur Azure avec Terraform","\u002Farticles\u002F4","articles\u002F4","\u002Ffr\u002Farticles\u002F4-deployer-un-cluster-kubernetes-pret-pour-la-production-sur-azure-avec-terraform",{"title":253,"path":242,"stem":243,"contentId":244,"dateModified":245,"url":254,"locale":96,"type":175},"Implementeer een productie-klaar Kubernetes Cluster op Azure met Terraform","\u002Fnl\u002Fposts\u002F4-implementeer-een-productie-klaar-kubernetes-cluster-op-azure-met-terraform",{"title":256,"path":242,"stem":243,"contentId":244,"dateModified":245,"url":257,"locale":99,"type":175},"Einen produktionsreifen Kubernetes-Cluster auf Azure mit Terraform bereitstellen","\u002Fde\u002Fposts\u002F4-einen-produktionsreifen-kubernetes-cluster-auf-azure-mit-terraform-bereitstellen",{"title":259,"path":260,"stem":261,"contentId":244,"dateModified":245,"url":262,"locale":102,"type":175},"Despliega un clúster de Kubernetes listo para producción en Azure con Terraform","\u002Farticulos\u002F4","articulos\u002F4","\u002Fes\u002Farticulos\u002F4-despliega-un-cluster-de-kubernetes-listo-para-produccion-en-azure-con-terraform",{"en":264,"fr":271,"nl":276,"de":279,"es":282},{"title":265,"path":266,"stem":267,"contentId":268,"dateModified":269,"url":270,"locale":89,"type":175},"Array to Map conversion in Typescript, with type safety","\u002Fposts\u002F5","posts\u002F5",5,"2025-09-29T21:00:00","\u002Fposts\u002F5-array-to-map-conversion-in-typescript-with-type-safety",{"title":272,"path":273,"stem":274,"contentId":268,"dateModified":269,"url":275,"locale":93,"type":175},"Conversion de tableau en Map en Typescript, avec sécurité des types","\u002Farticles\u002F5","articles\u002F5","\u002Ffr\u002Farticles\u002F5-conversion-de-tableau-en-map-en-typescript-avec-securite-des-types",{"title":277,"path":266,"stem":267,"contentId":268,"dateModified":269,"url":278,"locale":96,"type":175},"Array naar Map conversie in Typescript, met type veiligheid","\u002Fnl\u002Fposts\u002F5-array-naar-map-conversie-in-typescript-met-type-veiligheid",{"title":280,"path":266,"stem":267,"contentId":268,"dateModified":269,"url":281,"locale":99,"type":175},"Array zu Map Konvertierung in TypeScript, mit Typsicherheit","\u002Fde\u002Fposts\u002F5-array-zu-map-konvertierung-in-typescript-mit-typsicherheit",{"title":283,"path":284,"stem":285,"contentId":268,"dateModified":269,"url":286,"locale":102,"type":175},"Conversión de Array a Map en Typescript, con seguridad de tipos","\u002Farticulos\u002F5","articulos\u002F5","\u002Fes\u002Farticulos\u002F5-conversion-de-array-a-map-en-typescript-con-seguridad-de-tipos",{},{"id":289,"title":34,"body":290,"canonicalUrl":35,"company":301,"contentId":107,"dateModified":108,"datePublished":302,"description":303,"draft":18,"enableProse":26,"excludeFromNavigation":18,"extension":19,"imageAlt":17,"imageUrl":17,"meta":304,"navigation":26,"partial":18,"path":105,"seo":309,"slug":17,"stem":106,"url":35,"__hash__":310},"pages_en\u002Fcontent\u002F10.posts.md",{"type":7,"value":291,"toc":299},[292,296],[293,294,34],"h1",{"id":295},"blog",[10,297,298],{},"Through this blog, I'll capture and share techniques for writing great software - especially those too specific or\nopinionated to create a full library.\nI'll also implement some of the concepts I've used at client projects in a more anonymous and generalised way,\nmaking it possible to share what otherwise couldn't be open-sourced.",{"title":14,"searchDepth":15,"depth":15,"links":300},[],{"name":66,"url":67,"imageUrl":68},"2025-07-26T18:00:00","Insights and techniques for writing great software, based on real-world experience. Sharing opinionated solutions and generalized patterns from client projects, without revealing proprietary code.",{"readingTime":305},{"text":22,"minutes":306,"time":307,"words":308},0.265,15900,53,{"title":34,"description":303},"kLYmooUsFVBEbXK5HBcfcn-998xaBmnSFdfm4xhDg2A",[312,333,357,390,407],{"contentId":268,"title":265,"description":313,"datePublished":314,"dateModified":269,"imageUrl":315,"imageAlt":17,"authorName":78,"draft":18,"url":270,"slug":17,"imagePosition":316,"category":317,"keywords":318,"readingTime":320,"excerpt":325,"author":330},"Helper functions to convert an array to a map (dictionary) in Typescript with type safety.","2025-09-27T21:00:00","\u002Fposts\u002F5\u002Fcover.png","object-top","Typescript",[317,319],"Javascript",{"text":321,"minutes":322,"time":323,"words":324},"11 min read",10.78,646800,2156,{"type":7,"value":326},[327],[10,328,329],{},"Learn how to create a typescript function that converts arrays into type-safe dictionaries and master conditional types with type inference.",{"id":64,"company":331,"extension":69,"fullName":70,"github":71,"homePage":72,"imageUrl":68,"linkedIn":73,"meta":332,"role":75,"stem":76,"twitter":77,"userName":78,"__hash__":79},{"name":66,"url":67,"imageUrl":68},{},{"contentId":244,"title":241,"description":334,"datePublished":335,"dateModified":245,"imageUrl":336,"imageAlt":337,"authorName":78,"draft":18,"url":246,"slug":17,"imagePosition":316,"category":338,"keywords":339,"readingTime":342,"excerpt":347,"author":330},"Learn how to build a cost-optimized, fully automated Kubernetes infrastructure on Azure using Terraform, complete with HTTPS certificates and backup strategies","2025-09-20T16:34:55","\u002Fposts\u002F4\u002Fcover.jpeg","Plausible.io, Terraform, Kubernetes and Azure logos","Terraform",[340,341,338],"Kubernetes","Azure",{"text":343,"minutes":344,"time":345,"words":346},"13 min read",12.31,738600,2462,{"type":7,"value":348},[349],[10,350,351,352,356],{},"In this guide, you'll learn to create a fully modular and reusable Terraform solution,\ndeploying resources across ",[353,354,355],"strong",{},"Azure, Kubernetes, and Cloudflare",".",{"contentId":52,"title":217,"description":358,"datePublished":220,"dateModified":220,"imageUrl":359,"imageAlt":360,"authorName":78,"draft":18,"url":221,"slug":17,"imagePosition":316,"category":361,"keywords":362,"readingTime":364,"excerpt":369,"author":330},"Learn how to track the reading behavior of your visitors using Plausible.io, Vue.js, and Azure Functions. This article covers setting up goals in Plausible, tracking reading progress, and analyzing visitor engagement with your content.","\u002Fposts\u002F3\u002Fcover.jpeg","Reading funnel of your visitors","Vue.js",[361,363],"C#",{"text":365,"minutes":366,"time":367,"words":368},"5 min read",4.49,269400,898,{"type":7,"value":370},[371],[10,372,373,374,377,378,381,382,385,386,389],{},"In the previous article you learned how to set up ",[353,375,376],{},"Plausible",", a ",[353,379,380],{},"privacy-friendly"," and ",[353,383,384],{},"affordable"," analytics solution.\nIn this article you'll learn how to use Plausible to collect the ",[353,387,388],{},"reading"," behavior of your visitors and display at the top of each of your articles how many people have read it.",{"contentId":15,"title":194,"description":391,"datePublished":392,"dateModified":197,"imageUrl":393,"imageAlt":394,"authorName":78,"draft":18,"url":198,"slug":17,"imagePosition":316,"category":340,"keywords":395,"readingTime":397,"excerpt":402,"author":330},"Learn how to setup an Azure Kubernetes Cluster, running Plausible.io. An open-source, lightweight and privacy-focuses analytics tool. Which complies with the EU GDPR and doesn't require you to show a cookie consent banner.","2025-04-06T16:11:24","\u002Fposts\u002F2\u002Fcover.jpeg","Plausible.io, Kubernetes and Azure logos",[340,341,396],"Plausible.io",{"text":398,"minutes":399,"time":400,"words":401},"7 min read",6.16,369600,1232,{"type":7,"value":403},[404],[10,405,406],{},"For quite some time, I've been looking for ways to gather website analytics without showing those annoying consent banners.\nIf you've ever wanted website analytics without compromising privacy or user experience, this article is for you.",{"contentId":87,"title":170,"description":408,"datePublished":409,"dateModified":173,"imageUrl":410,"imageAlt":411,"authorName":78,"draft":18,"url":174,"slug":17,"imagePosition":17,"category":361,"keywords":412,"readingTime":420,"excerpt":425,"author":330},"Learn how to leverage Vue 3.3 generics to dynamically adjust property types based on other property values, making components more flexible and reusable.","2024-11-04T21:30:00","\u002Fposts\u002F1\u002Fcover.jpeg","Vue.js logo with computerized elements",[361,413,414,415,416,417,418,419],"Vue 3.3","TypeScript","Generics","Reusable components","Conditional types","MultiSelect component","Frontend development",{"text":421,"minutes":422,"time":423,"words":424},"9 min read",8.23,493800,1646,{"type":7,"value":426},[427],[10,428,429,430,434,435,437],{},"How can we change a property's type based on another property's value? For instance, return a single item by default, and an array of items when a ",[431,432,433],"code",{},"multiple"," property is set.\nTo demonstrate what I mean, see the recording below. Here, you can observe how the type changes based on the ",[431,436,433],{}," attribute.",1781641708759]