<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabrielle Crevecoeur</title>
    <description>The latest articles on DEV Community by Gabrielle Crevecoeur (@gcrev93).</description>
    <link>https://dev.to/gcrev93</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F422432%2F96bdc511-04b1-48ab-ae83-22123d263208.png</url>
      <title>DEV Community: Gabrielle Crevecoeur</title>
      <link>https://dev.to/gcrev93</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gcrev93"/>
    <language>en</language>
    <item>
      <title>Type | Treat The Finale</title>
      <dc:creator>Gabrielle Crevecoeur</dc:creator>
      <pubDate>Sat, 31 Oct 2020 18:50:09 +0000</pubDate>
      <link>https://dev.to/typescript/type-treat-the-finale-47a4</link>
      <guid>https://dev.to/typescript/type-treat-the-finale-47a4</guid>
      <description>&lt;p&gt;Thank you so much for participating in TypeScript's &lt;code&gt;Type | Treat&lt;/code&gt; coding challenges! Unfortunately, we have come to the end of our spooky journey but no worries, there will be more challenges to come in the future! &lt;/p&gt;

&lt;h2&gt;
  
  
  Beginner/Learner Challenges
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcHICcCmoC2BDA1gSwHYHNQ0dCAHE0AdwAssBjK0WyHHRWgFwGdR3JDQAJmnZoARmk6IAUCFCQAZqAA2kWmiWg8VSJy6EcAnlURZ4oeWgBuMeFnbIqaaDi4A6KTLBRohJIyTCuATsxoxKWIgulDT0jMysHNy8RsKCwmISiAA0nvqGAJ4woI6WyESgAIIACgCSoEicJMySmpGI8MKIhvKQZoU+Trzo7HTqSvnuuQDqxsT9oLpo8Ow88PlBPHwCWI1KaPlGDk4uQZxZoPMB4QBe0rIhqfMCzLArGDiQFMWfmzz5JMgQsgSEs0ChEPYzERDAAraC6UDw5AAAyI+WRk1kqJw6OKElAdm4JD2tGyoFE0BWaDiSiUiDQeGgyCQTBQ4IMXRSK3mahwuSRoFgNQ5AA9OQAVf6ITiwX5IFCQUqHQVo2UUOzaSmMRz4DZA3IAcW0umqNQAStKmjgWuwpZNbQDQEadOxTRbGs1kABeUAAbykoFAODBiAAXAt2LZ8AHyaYQgARToAfnDuijeBjAnpCeTqcjQRjoiwkDz6Y8gcczhG+E44Yq8A6+QAPL6eHY6aWgucSPBFZEiKTO-hzio1CNmEOCABfAB8UinHiY1pW212+2dCJ9AAotC7wxvXbV3VbJABKUBemd+mNLziQOmuFR4LfIgByIfDABJfbvdK5g+CU7IqeMZYIoO7GuwrhFssVCJvY563veiCPpAz7IgAQnGVBCPkX4-pB0HYfBiBASBgZgaAEEuq4WbCHBnSIc0yGoeh8YRAI+G-lBdE5vYZE3sxD5Pi+AA6OBYSWoDftxRGQAJgnWixInIuJ9bsBQvQYLWwExrJlYnDWrg9PAACiaD0FuSwaVpF5Xv6gaBquxL7AAEsc1Z4JwVnLJp8AYORoBTiBC65N4Zh4JA6jhvKfZGDs+j5Oc6ohDAKz0EQeAbAebqWp6Ui3iuOwufk7lVqcF5UQZnnhmi56XtegZIcJaEvqAAC0oDiu2YbSb61VBK4IzsHSAlNUJKEqY534DfgqFjsWOBjXESkteh039R5g09n26A4KSAmhUAA"&gt;Investigate haunting data from ghosts&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFdQCwIYDcCmoGlQJwJ6gM4AOKAxgJYIA2oh0AtoQNZkB2ANOiwCag4ygB3BCwAuoEZFAksKBCLQYROYqABmWSHVBkRAOgBQ+kKAAqWBFx1lILKpTxFZzFgHMOfWCRiUeXFKtYFcWU0SCxtURQsVQQSFCMwVTDxODR8RGIOACNoMQ90GVAbe1AXSFYXcUlEVBSyfCKWNFoGZzYEgkl8rhsAcjFVFBRqSjJGNB1ehoEwkThQLmhCUZI5CpS0PwCWKxsDfS8WfDEWplZQAF5QAG99UClISjCALlAAIhxhp4F6uDf2+5KYivN5laBYLj-O4EMgALxQIIAsihLPQofcUE0sC4cCCAIwABgAnKAANIAKxoUVAhIJLnRam+URRrxilHwKABMPhAGFESCAKwE3QADlAAA9QAAWYUANgloAAzMKAExSOhQgC+AG5DMYAJJHeQWIqqKQyNaudDBFSjcbPBIdIFoAAK9DOLEuN1AHXuXieWFexywFV9oF0EY6msdxh5wl4-Hy0A5NpQkDNzoaEnNsnk1vwFUoaFGWIA-IZnaA3a1zldhDg9WAAHIocViJYcGQchBYEjzOCQAQJzzx5NBXJkUZKVNVeDCLhFp2pAgIOjNDRZItaH5za2qaAsEgiawsXSgAASg6k8fyrZE5iPGw6MhE4M9lfUmjqDX3h+PNlnFwUDEOY0lXNBnXLA4bGOHM5BQABRcVV2WFBqw9L0AAoAEpLgAPhuaEXzfGh3WcfRo30St0OcAAxDQ6Fog8jxPL1630IA"&gt;Plotting pumpkin types&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcHIDcCmoBGjEDtQGt0AcBLDAc1AENQATAsgJwE9RIAzUemW0AF1oIGNsTTj0RkuAKBChaiAM7QANl1mhmkTu2idZIxFwA03ABaJGxTIlpkFCxs2sLQRLpFCSwXIzOR8xiYuoEcgBc3DJisoY8-NgqZBiUoBiQALSyRpAA7rIAdOLuoADC8WwwoAC2ZLjG3tz0eHKgmUb8RqC+WJRyfLxoTMwFnnLIMvJKsgD8+XyQGDphosqgALygANrioKAA3qAKkL5cBLOhAEQAEjCyyACMp4ajilxnImL3C2Khux2U9GcAMscsAAhOinUAAX0h+k2Oz2BzEQLOl2g11AAGZ3o8lC9wlx3q9nnCfn9QKcALJ0FSg2jgqEQmFbXb7Q5IskotEAFixcieuMWBLxX1QVUQlDOhUgkGwQVk7xJZwASuhrrA5ZDIeIALrTWbzaICFSrDZM+Gsk7sq7IABMPLGRNOBuwgpiZ0pxH4dMZcJZiItFytoAA7Ha+WSnS6BGcAMpaPC8a6UOna3VzLhJSDRjLZFbrWHMhFHf0c5AANlDOLJyTS2eTOoKADkssYxKVoKAjGQkMZkFx6nJDB02xVRT3ygVkunKNA8Ap+H5QLBfUWMLByAlF9iuGuUIxUURSAUKNAMEDVOpN7ylGv4okKBhEJknBguJZrnwV3UGlMgA"&gt;Tallying Trick or Treat responses&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEDkHsFpIOwKagNZ0gdwM6nQCwIYAuoAltgOaQlzmjwA0oARgK7ECekLohu1yoTiwBOOSMOQAHADb4AxkgBQIUtgIs4hBABNm7UPlCTI0rcPIIyhAHSgAksWTVthzCznJM15WB+gAmlyikEwAVghyhNjICAiSoBaEhNS0cgQ0OswIfHC6vEiYCoiY9H6YhJDxvGSgAGbCkAC2oASSkghwKXqgjfhONIJBdGERUaDCCPja8NLsfhWg5ZU8fNiYxpDI+kzZ+ABuJOLeioTs7aAASqPi+gC8oADeiqDjkE2YAFyXb40A2gC6z1AaDICE+Bjg7ABigAvooTmckBcfqB7k8XnB8I0EF9ysIUkDpuJwXAWI0dsIgehnBgSWSKUDyLhIOUAPxffCQ2Hwvy4JKSD4gdDC6waBAADxk+GoOnKLFqtWsciawAA4szyphoJztNAAArpCqNTDAABiWK4WoAEvgNFpdVbLWDtbl9bIFFqAKKSdDiXjQCaRG7WPmNaSKZVwcqgOK+4S8K5B4R3R5AlR8wiST4gWN+5nSbSBirJ6zicii5DAXPx3CwAsB67JuvaYAHTAkQitkjxlj4aTQCoiYBAhrvL6-IEvB7ArE40AAIk9mmEnIUoBt0mk88YROE4IArIxqblaV8AEygGGlF5TmfYr7zgAquCQAGkO2kOtvQLvwWejzSWBfAAzJe143tOmL3guer4MI0hBN+v7ngBJ5AaAoFXpOjx3nOT4vhAIiYAgyZIW8e4oTggHgph4G3lBeHPkgACCSQkHIZHEpRx7TOhACMYHYZBs4PkxoAAMqECw2jsJxFGgP+VFoX+gk3jhDEPgAsvg5QkaAABCOijo0cngnxqG8eCAAsqkQbhD6GYWKJnqZ3HUSBl5AoCcLwioz41Mq2gFMyLAFqAci2sR4VNJIJDSHpJENHuii1BokSHHALS2poAAURY3F8ibFuwACUqYvJG0bGai4yNuw1jGZgvzabw1i1Ah4g5S1uANTqTQ5WVABUtVJvVjXWPFNC8CV-wANwjj81hMiyxBovZC4APJhQAUggCoTLJnlwkAA"&gt;Stop a sneaky spooky moving things around&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEHUFNQCwQwG7TqAzpALqA9gM1tgK7qo4B2oKqGATpJqAO4wCWAxjAFAigDmLSUkSxs4ZACYBPShJxtRqFtjJwANqull640nQC01bGwDWLMrwB0nbmAAqrUi1JjK8wjTgZodAA510ZBieShR4oBgw0DBEJDagAEaEWBGQdADkzqCq2Fhh4oQ+quyekOKgbNji0GawqZAANDJlcZJETGLJ2OV0JZThkj7QzOww5USqZb7+kIGgcWLS0cSQVnEAkljZ2MakRcbQKeQa4azmTKwc5fDmkKTxmIz0ZHFLJKBOJ96Y7hQIaoTQMIAA1o7GMAHkaLYehggU04odcCwaNRQD44B4ALaYVI4fBA-wYIzGIEWOZxADCLlahFAyz6vBmqXY-UG4S6mLg+z6QIAEjFIHCMANoHFhpd4JlFOZVMgaLxCNjZrhsDRPqA6BgfqA-qoAXMeMDQSZIdDIJ44WIyod0Vj2aACbciSYgQB+azCtkAMWR1H59IAvKAAN6cUCgcTYVUAOUV9xoAC5QABGADcYfCNDBpphAAoAJRJgBE8SjxiLoAAPqAi6IJJIi+nw4TibmWF5Mahi6XthXq7WrQ3CzrsCxxOmAL7pzie6AAZUgFQk-vQoCDofDkZjcdSSYATE3M9moXnh0WiTkYPEaMQYH2a5izBhUI2My2TG2O12axeItfb-eRaPoEL7Dggo7jpwU4eiKoD2Mi4grtA64ZluNCxpi8ZJgAzIexoQie5oYAWxZ1lIgFwD4hSQIBkZkEkL6Hu+xifpAnakYOFFUbKtHKAxRZgRBk7TrOoBekQNAREha4hqhUboTuiagAALHhWYmoRngkTWZENlWNaoD4ZbSIZY6pIxb5Oq27Zsd+A71oBhnGWgPhmSiAlJuBY7CTBbJzrQ9BYEGADaPoohgSGNAuS6IQKjTwTQsXLI04nuFJAoALrpkAA"&gt;DRY the houses when re-stocking&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Intermediate/Advanced Challenges
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcCdQNYEsAmBnUALAhgNwKaiz4AucAdvilpALaEDuSJmo2oDmkANoQEbYA5gCgQoAGbRu3UJHFZs0yA3z5yobpEgkANG3LUAnjADkBUCWwI1FzIRJJ6FyKFFhaVwuxT40AY1gkAAcHSHU5NmlZeRZ8WgAuYWESQyDCAGVybD8EACFsWAwAXlAAb1dQUCz6eNAAInSuWBJQAGEuPx5sEkJ8wrrhSuxaGHISWoAWQdA-bANDWpJYaHxhAF8klLTQAHFoWgFpYrKKquH8WrqdrXxDXf3D7jQBys7NWEvBYjU60AAfepBOBBXjPaazeaLZarDbJVKEACCQRBvlAJXK02qF3qSJRYNecxQCws0PWm3hbS0yFR6NOWMurSpSF8LxmhOJSxW0zSc2gJDQUK5sK2GXISBy+EKfTRJ0x50umXF1kKoD6rIhRMFq0qPPIfIFJKF5O2ABUtCwgtg0D0ZRjKvT6mbtJhLdb8KzaEgxhzSZUlkqtWS4dsAApqPxIGS0uU1eph8gR7is-05QOwsRQaAzYjdLygNBewS8UBBSOECKKGSxIi+KT8vSEjhzFokFzQNCrMQsJAYVv5nDEWR82yML1i8iCDDDMKCUDGOCIVBoAB0rmDhAASrXuPyAGKwOgACUrylU6hKmWyeQKGABewOldvoFxoP+oEVEqlBTfjMg1KfToWlaNoAvGiZJBmpiDuISCFC0giQIWzhVKo1B9h2lqwLmQ4tnYbLzBIB60COJL4N0aA6G4c4wPhoAoC4LDdKAuBIOwnQGMwSBhIoFjwiuEFgCKz7SK0hLMscy6SVRQkItIJqBDkElSVRskjNaI7EHofDDtwzAkMWJi5JAfB8HcJrYHwoImPh5DaAo5i6vqq6ieQVHzqAHjWGwGg9i0EQauJoAAFbti04iQPAmCOAA-AJvHbLJ3AuSg4kAOrMFwfJhry-IypJy7CEAA"&gt;Sort Trick or Treat loot&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEEkBcHIGdQEYFMkDtQEcCuBLSTQBDdJANzR1QHMAaUWAewFskHUCAbJSUBrHwhw4BYAFAhQkABYEqUhrEjwAnn2jlEKdAGNCkbVMpVQAMwYAnUKqyWTOc4qtJClyqDESEWWJSSxYAHSgACpSenCgqAw8ZGiSMqAA7haOCHjxfHJ0HmDpkDao8Hw8VAwAJvDEZaBlSExsleYEgoygTYLu4mBVRE2RDIlEQrzklgCyxGGQkMQBYjkhCQjmhJRFJlZ8lviETKBh8NrMBFgADkl4UkTogqXml0wLZpa1gkYX0vEEp+YMCFxMIKhJDKIj+JDmHjSHCVDh3B6dCQwr68VAcUGJQigtyJQwGTZYUC6dCvDgfK7SAgw2BYJBzUQLYGgsIaWDcUBnIigDgwngMDZNU4WfDVOQKJTAWr1QrAUoVBY9FnNWAAayQ1RwG2sROIphwwzcjBYvA2lJq3FWHFgCqhS2ikGYiH4-R4BmIVAIlPsRPKdPmXVAAGUZqC2ATLFQsC4yvSxJBlKcCAA1HClUAAXlAAG8xKBIrskAAuUAAIhTaaTYYAEswvOZjAARJD8WAGNBlCwmEs0XOICyoYslsYMDgd0iEEu9qRYJjEcCwKTFyDmWliAC+-vjidAAC0sFgyZmc6I86gC4O9wfu72pWwlyukL22agygAhQjaFXBBhVpBCAAUACUxakAwOBlOum4JsmlAAF4ZtmvZniwg4pqg8EAMIcMK8jXie5rSveq74c+b4fl+P5-hwQEgWBEGiBuDKiFuBAAOI4LBEIIcep7nqW7GceYeF5nKRGPvhhgAFbkcGWIAApYCYJgTKgNGgKB4GQUxLFBjyLCWJmiH4chRaloGekQsJPrYeYg6sU0aAALSgmynpSL8WByFZSDaA6pwcIQsBMDg2hiVpcbQaArHyIo8CZuWDCgAAPru+5kilaGwf6tTaAFfQmFgqC+TgYYLgwn4AIIvsEKynP+YqxcWFXmCsygADxZqAPl+QFQUhWJa4AHzAepdH+sAABUE2gAAArUPw+Xo6qgI58TIsiCCENUW2kCFBATcAYg5XlBAFUVkAlTovz+MCwbtEwsBqRp9FiGdxVhpQ5CKKmS0AEpIEKkL1TFSjFtF4qwAA2gAuoBRl5pqoD-i4SCseUj0NUogFwzxeagBIACqhQ2FSGzIma9xyLa7wOjUDC9nmnjOukRwHtUyTmCqDNEtdsC3cuzgPUB3NNPk5ioL2jG9hINUhSqoJeDwRrcIY1AQGtqAqkkBDEp0jNgGEL5cKiXK6GyjkIMojlmwQm0+Na+GI8jTRNtKGMg7A2Pw3jzxI0chQ8Le6D8qAmOe97eMEWwASke+n7fr+AGAdzjF5lL+ESAA6kg6gEB27BrZU3LRP0iQ9hnYBlWzqDQDwyCSAwiVlJqdjaAekC9k7KMAKK+Qwcm9cF2jAxDXu43mZWVdVtUj7Fyf4Yx6cSAA8gA0nQ0LwOTCTtiaPq1EkeJXMStdEobHpBAsGG6tqiT3PgpiFe9hSaNhgy4iFVyJPqZJcLazQIAYBoBYRwD5HCYKcfUSAAD8EAYDwGwgwFU7wFrTBchCEq3heDOkpE0S+TEJBo3KNyLAn4giyVDOgawEYozmBjEAA"&gt;Bust ghosts to guard Manhattan&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEBEEMDsHMBpQGEDyA1AkuAjATlABaQDOoATgKaQA21AnqAA4CuALqJKAEYCW0AJqAD20UKwIVQ0SK2aVhAMzFkeAYwDWwssqqs+sAHQAoEKACaQud2pCNhEsMasAtBUGshoPsVZVB-T05WMmZoTSFtYN0vaB8-YxMwDFFOEOICMU9GSkZIeQUIsQlQCgA3CmhWRDpLezJ+VSF+NyKKRPIKYmZqVlI+D1bQAHIAFRCwlDIx3QAlTu7eobE6RkkAdwI1DJ5SGkpIfjp2y3YhJX4ZSWcvViHSAFsd4n0OUAUKNaYyIVWyPU6AIRGdpIGCgGrMDprFS+YZjULqSbTGRzLo9YhLAZgoRcABWFFU7FYK0k4hk7R8kDofVExDo0FUoDWPHEgx8KjgNOGwQRSP2rAAyowhIsAPzAxqxInjRFTflCkWkAC8oAA2kZQHDigAFPLqIaIDXDAASlmIkgAxNgDaAjUNTcxzaALQAmA12pARaAUbQCgg-d2aoba6iQVSSM6gADqEXSPEY7oAuhxSJKfMCjMTVqB4RM5bN5ujQCqAN5GzUAIhGOr1FYAXKAy5rm82At6G1whEJqFRoPByy2mf6G+z9P3B82bCKG3NGvUADyjuCIGB0AB8A4AvuPmxWHU6rRXQA2mxPQG2KB2uz2YDuJxshCPgmOBy2p6wZwSIvxF8-lxxoHXLc71APczUtF160bV9WxES9uGvXsQJbB8nw5BAYM1d9PznH8lwQACgJbTcjBIowFFCQkeBEUB7kgdQKBGFBwBQAAKYhhV6BsswoSMeTzZFBU44gAEoG1zWVBNRBZSFPTVKFkMhaWEgxKH4Zhw1Y1jsjKRBVDkShKhE4s12gs8OkU0Q5PM0ADDsnTSmQs9VX0shDNYRMT0wmyLwbBQaHNJybNAbDG23bzzNQ0CKwi5sSPM+K4sQEtNxTHMZT5As0V6ETSOBUwLEhVQwQcngPkGShstIUoeE4CsZlCI9IE7coJREHxMgCYtaPoxjmLY-jJPlYTcrTbsKAMGxYFYjwAly9oYzIdRiEzJohFVKsayWitEwMC9up5Np2j9SxqEERb1FWgINs9JSfVAE7GB2yau3YUsyNMAAxSAeGoFbZvWsDHUtABmZ79pVfy-qO47hV+n1nB2DIfj0EQaDEeNdnkTh3k+ag+E6bgKBsT5xB2W0M0pynTCjPJoH0BsFXhsgVvysBsAMHNNj6XYesYVZ3BJUhshxHt7ip9oXU56sfUkcnODTYIfsqYRRHESQ6P5loeI4MhYGYe4KlYCXTBBznCtAYrREoZxgdeXI-kUQZfFUAh6YAR2YSQFG+e5Bi4ChYD4b1tFdmgezgSRsEyUBYAoIligoAAPMN2AY6k3l99pm3V3WyCpBsCFYVhGGIOsQGaUoDA8YAeOIVQVCcWuSWcKIZGcMPaAqOPnBdZwQegbAADYgA"&gt;Track Trunk or Treat locations&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-beta#code/PTAEE0HsFdQc0gF1AJ0gBwKYBNQEsA7RSURAC01AGNpFMBnZMgQwBtXIB3TTA6yALZZEeEZAIAaUACto2OITgAoEKGyQ4cAJ6gW7Ljz7D+jaAIahmycpWYEC0NqHTMUzbJgB0oJUo9VWV0oAM2gCKjE+fzwPAHVCAkwUAAoAIxQebAAuUEYURSkqSFNzHLzFAEocgG9QAmZS3MR8gjgpADcYzEgy5sVQAF8lTkJ1Tk9ouISk0ABeXMFuxIBRVnpMABFMKi76X1UAeTIpZgjHdh0tGDUYggByZABaBfNxSkw1ygRrEnVSClAoT4qVEnjBKjAABUyDA4GRQFdYFQ7KBOFYqPDRKBxKAAF6QQQ5MiIRDoLIgTiUzzEIQAa0I9HoAEdHBl1HAUGFPEUBMA9BxuLx9mAAJIERiYdxSRF3dqUVKGSz0Wk4UgkCisdCkNisHTQLXMXJFDKpSCuXCQYL-SgCYrICHODDQQIoEyIMwWU7G7D9YjW0C2xiO9DO1ygdKZejeKDQWXy6B4ViIB0wZCGll4Ki0-BCViYcxEKx4HEKgVSVK0fDIDjreikLRYfAEYKQFACIviTzC0AAOS4-qKRAYyDwdcgcpQ0uuwR4rCrdzriNd2FoOj9GWCp2IrvIo4dRQ8atQmEQzEI9cbhBbbY7fGeMrluklKFw5Cs-oALJ4AIzhk+GwgAjkBgHXoRZd1aVEyEzeENXQOsRnIC9+nKSD2wIPAQ0CSIuyUQcgwjHA63mABtAAiAAJGACGwMjQCkMiAGFWwUOiGIABUWNwMLsMiAF0lX4cVk3w5AihKCxSLI9izHQekCDY0BKKQUANg0RSyIAITMVI81ATSeH4wTRN8IEImLPhTwuTisNceJ7CSehkgAfUI7B6ByRAG26K03PoKRnPE91zA8i8fLdD16AqUBqiUUAhKDEYHJQUKACVtlbbAAB5ULaSwCC0AA+OYYqGOLAVbUBklE8MMlVS1QFcur3Oi2L4vi68qpqoKPWxK1ArtSLWvK9qEpHXB5gAAwAEmqNyBkeWaevMAZJupSAABkDBQRjmHWZIKhG9qksSFKSJiAT5kmTB7NOtJmsKQbzEO0ahnisr4oyd0UD4E7HKUMrVBjagUU5SzoLrTAAA8GnQPTz0ymY-XWShOBYawAXoFhGwamw1CsQ0OEgWk61YPAVXLWgHTxjJ6GdZARnYXRmEfFUtAQ6CMUsDJQAFJJkXWXBOswCcdAEPAob62rMny3BlswKQvDgLJu1i1RRrImEwmwR4QzpQgyJqMFPAGCQHQ1rWaMeGFkHZQ2YuN03zfazXqJ1isBF0+VDKNsEnfVl3jQUXXZPk+3qkd534uNh0ypqv6UpKqzdRs0MUFuxz7sjR6JKivDxDAvNPA4OBkgTvOHXYvba2GaYztd7WQ-1hS+M8epzG7ABlLXWCFs9WFr5L6HIvW5MIJux5bzxOg8SAu-QSBEySPBgkzUhMLrUsuBV3xd733fVG-HJoVHcME17sdgitLo9sBNABHxnQAGYpDRmCz8TdypfQDJOhgOtsDMHZmqOe+9VAACZj4AjwLmfMvBTyRFRImOcGQMw8xRJNPak1sQ7k4CQNge1KYM1EPCMCHcA6olbNmREIMjCuBEDqHQq8aL5XyvQbgKB9571UAAWTPAQXUMhoBBncD6SC6YExZhzHDOBhZIhSDAv8d8NDkR8DBv6fckBDzMFNI+RCWs0zODQF7AQO8zKILIUsTAqx1hbB2B4JyTVMi9BaHlAaEkXGVBqHUBomBPGtA6F0HoTRXGDDau1IGDAThMxsOsNQGg6wsEfIaduqNOaYjrLIERT4oYHi8GCZmZAjo1TgLwVKdgKLQxKskegeBcR+LqDpJI0VZjFRIsbAAgigNwWgal1MwBUVu7Z0DJAOnMYqfDyCeGCETFIkyyCeG4uoAQYyABUoBvwADYKjrU7n0VoyQtkVB2dIReBBkh3DuBUAA3EdL60AfoxSOqNVJORSkEHKQQSpUNkjbLNqNUaM9uhvLKRU6GvyXrtSGAMIAA"&gt;Help the annual halloween puppy parade&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-beta#code/PTAEE0HsFcHICcCmoAOBDeAXUkBmo1RNE0BbUAZwGMALRAE2gBsBLAOwHMDRTIA3FsjYsONTABpQAI2jYKkUokhtkaKlRb1EbTGiZMAngCgQoKsoqbESekTo9+g0ACIAKvYByIsaQzIAQoi4kEigAMI08CwUmL4UzkSQ0qqgNHpMkADuiNqgJmC8AoiSmTQstKAs2EjpBpUUbLCYAHRGRuZsMQ5FFK6QAMo0WaAAvKAA3kagqelZOWwAXBOgwfAA0poUS7h6FMgAvuJToMKisX4A8mwAokyk-ZhIiJhL4yshG-RbK7sHR9NDKjQCgABUgQO+b1Wn2+j2gf2OmDoAHUQjFkVVaK93utNks4QjphQmDkUAYABKQfRZbHQvE-Jh7UD7Iz7AgUMwWTBtUzuRB1DiQbBoTJoOqZKo0OzRIjwNB8RAxOpSRBUNDA5AGGAzBWUBTIAAGaDYBgNHPYdmQ+U5WikaCZqzMNUw7C4SOQ1DojBJ8GaoAAgmxQBc1mZ0jjuLgWPAuugKBRJDJuaZsggPWkopwbcgJUicO6YwQ2LZRTpEslQIgAB4oVgaFptXDQNhUF3KHhoADWiH6tAYzGsAApCoJYQYUEp8CPFX1BlkAJRLY11SbTDpdT39kmjCZs+1F4zTR2D9fYaeVIMXKQAK1VLW7Bgow8civn84mxzXXLDKCqeg8ZDIGM07NLQGD+pgg4AAzzs0mCQAAqigE7wGE9qIIO74ANTdIIzTEuUGEAIzzgA3G00xEn23qIAA2gaHDPAAauS-QAGIhAAJOMaq-roTAAYo+wGgAujumGjAAfLun6UNRA70b43Zgig5jwGwHHwNxvF-gJgHCWJYwSSM0njCylFyV6CkGrWYraWgfH-vponie+JkydMLLHEgmDQOpllbogrI8mAYTOoq3CbjR8DtN+05eGcO5KT28k+s+PSzkMmTziFoB8kG4bug6zatiwFgEKE6rwb4LpqvodRUOFthGPF3gtIxmAsexITkrM2TaJhLUvglYjNMlKlqRpPV9fMg2tWczS2RSM0DTl1oeEK3BpNS-VBtOACEeVlByFBDMwtgqtw5ikL+PqVvA8AhENRQje1zGsZpr2+EggSrIgERRDEcRzcNbVjV2iATSEU3wF9fi-SE-2RNE5xPjl82jUtcM-UEiMAyjwNrRjb2dR9PXgsCYIQiDL1g+NkCqdDmmUhCVPAjTgivYtTBiizlMU2jbS5f0KCQCwPocsatjoFgoAAEw4PgSIymB+jaIxFXICqGSZELetC6YYRMPCoBEX67gq9tJKcFr0Di18itK-YPNdMoxSgKU5RSjI9scnguDWu6oAu9gbuSM8VDNFH+t64bxvIHL5t0EyMSZhwhhEOODArCVbZBmwgEcmqQYoI9dpSBnl1pMWJLNSmkrcComQrCQvmhLgj3kK4We9lEKDYAALM0RExzHpgAFTjyCGDYJgmSQJPuVQNAOrIEH5haOWIQcMaLAAF5r-YFCAQFNGJrIHsN8oGedpsuGKq0pgAJKYLAF3IBwzqVPgWor+Y50EGQhnIOx9FCZwnByAAtNIC+19xR0AKvfa0aQOQqlyFoKgPMbDlkuoQW+DsQJCybC2POHZuyfF7FZNK04xwTjwPfXoAwsqLgPB+L8nQ5CpSArudkB5jjHlPPfQSyB6FXlvK2ZoD4nw0LfGwyipgAACmAKCQJEGwRGslBHnmAi+Rhc5Mi0XioBESskWD4HSnhOkXx3yrgspyDhP5dLCKSsNQCoEMwQWgrBeCSEUJoT2BJHCRjFD4TrMRMiFE7FRWsh1Lqml7KOT0kJFyRk3KmXMlErhikIZQ3UvEniDknHOUMqAYy6TZJUSoXRGyPMDAJKKckkpZSPKUQyV5aYPk-JBmiSSYK1p8oewQR7ZAaRdTGhwDeO8gyvagA1ByIqa8s4UFig4-BFAACyoNErAQhhQrh8ALEziYQuYWZ0mC2B2OLIwazNm0wWrEsm8Beo7VmjlG5WzMa1OeTrV5pyYDnNQPaZZ7y7mjQed1J5As2aCxBZzOmOSGaTWZlCgWg1YWIC5ktPmoJUVrQNmAEWYs7qYPhKgxAOtR7WjNhAbUxdQBIEgRqUAv94BEEQDdHmxBg5VGsHocBipz7YF-icHIthCBNw7MhbOmAs6tEpdaROoA2LsHoK6S09K2qUFFtgR0LL7GqrznymUjxyidgMIKy0lUkCNFnpAJIvgTSoEgJYPOyzTCUVKNYTUtLxlMvdKQOVlLTAAGY-TLw7HUFQ0qkgOVrHUNA9ADVlQLkwexjw0DsGUeWPVvgpW2BlROFYnd1VRhjKHFQRggA"&gt;Put on a horror movie marathon&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Yesterday's Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;Like many challenges, you answer to this depends on how thorough you wanted to type the houses. &lt;br&gt;
The in-challenge text tries to guide you to answer with a single generic type which passes the first argument to both &lt;code&gt;trickOrTreat&lt;/code&gt; and &lt;code&gt;restock&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;doorNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
  &lt;span class="nx"&gt;trickOrTreat&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;restock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;FirstHouse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;candy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;SecondHouse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;toothbrush&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mints&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c1"&gt;// ... same pattern for the rest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This could be enough, and that's totally enough type safety for cases like this. This does lose the &lt;code&gt;doorNumber&lt;/code&gt; being exact though. So, here are two different routes to give the &lt;code&gt;doorNumber&lt;/code&gt; to each house:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Via a 2nd generic argument&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;DoorNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;doorNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DoorNumber&lt;/span&gt;
  &lt;span class="nx"&gt;trickOrTreat&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;restock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;FirstHouse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;candy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;SecondHouse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;toothbrush&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mints&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c1"&gt;// ... same pattern for the rest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;doorNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
  &lt;span class="nx"&gt;trickOrTreat&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;restock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Candy&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Via intersection types:&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;FirstHouse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;candy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;doorNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;SecondHouse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;toothbrush&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mints&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;doorNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEHUFNQCwQwG7TqAzpALqA9gM1tgK7qo4B2oKqGATpJqAO4wCWAxjAFAigDmLSUkSxs4ZACYBPShJxtRqFtjJwANqull640nQC01bGwDWLMrwB0nbmAAqrUi1JjK8wjTgZodAA510ZBieShR4oBgw0DBEJDagAEaEWBGQdADkzqCq2Fhh4oQ+quyekOKgbNji0GawqZAANDJlcZJETGLJ2OV0JZThkj7QzOww5USqZb7+kIGgcWLS0cSQVnEAkljZ2MakRcbQKeQa4azmTKwc5fDmkKTxmIz0ZHFLJKBOJ96Y7hQIaoTQMIAA1o7GMAHkaLYehggU04odcCwaNRQD44B4ALaYVI4fBA-wYIzGIEWOZxADCLlahFAyz6vBmqXY-UG4S6mLg+z6QIAEjFIHCMANoHFhpd4JlFOZVMgaLxCNjZrhsDRPqA6BgfqA-qoAXMeMDQSZIdDIJ44WIyod0Vj2aACbciSYgQB+azCtn85YAHgAIthVQA5RX3GiNKkSSQAPlAAF5QABvTigUDiQM0EOYsMALlAAeDodSKfCNDBpphAAoAJR5yNSADcJcJxMrLC8mNQdatklrOuwLHETYAvh6RaAAGLI6je9Dx0CzyA+gCMjQARPFA8Y16AAD6gNeiKNr6NjtkAZUgFQki-ni59ACZ10ScjB4jRiDAd-u15izBhUBPM9oHsZFxFvBN7wAZnXI8pG-A84B8QpIAQtd0zIJJANPThPWgCciBoCIIIXAUfQAFlgns0NQHwt2kWjB1SbDgNAc9aHoLAEwAbSnFEMEXRpL2vcCBUaUCaFE5ZGgI9xiIFABdJsgA"&gt;Our answer&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;OK, this one is tricky. It's based on &lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-dev.20201028&amp;amp;q=248#example/mapped-types-with-template-literals"&gt;this Playground example&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;We started out by making types for passing the data around&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Movies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;moviesToShow&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Movie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;forKids&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Template strings literals to describe each task&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Get&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="err"&gt;getVHSFor&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;capitalize&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;MakePopcorn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="err"&gt;makePopcornFor&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;capitalize&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Play&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="err"&gt;play&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;capitalize&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;

&lt;span class="c1"&gt;// A union of the above literal types&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Tasks&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Get&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;MakePopcorn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;Play&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These gave us a set of primitives which could work together to create this whopper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;MakeScheduler&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Field&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Tasks&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Field&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;Field&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This type uses the new &lt;code&gt;as&lt;/code&gt; syntax for mapped types in TypeScript 4.1 to essentially map each field (Field) from the keys in the input type (Type) to the union &lt;code&gt;Tasks&lt;/code&gt; above. This means that each field is converted into three templated literals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;input: &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="s2"&gt;"halloween"&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; turns to:
  ├─ Get&amp;lt;&lt;span class="s2"&gt;"halloween"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`&lt;/span&gt;getVHSForHalloween&lt;span class="sb"&gt;`&lt;/span&gt;
  ├─ MakePopcorn&amp;lt;&lt;span class="s2"&gt;"halloween"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`&lt;/span&gt;makePopcornForHalloween&lt;span class="sb"&gt;`&lt;/span&gt;
  └─ Play&amp;lt;&lt;span class="s2"&gt;"halloween"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; -&amp;gt; &lt;span class="sb"&gt;`&lt;/span&gt;playHalloween&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which is declared to be a function which returns void.&lt;/p&gt;

&lt;p&gt;This type is then used as the return type for the &lt;code&gt;makeScheduler&lt;/code&gt; function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;makeScheduler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;movies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Movies&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;MakeScheduler&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Movies&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For simplicities sake, we skipped typing the inside of the function - though the folks who did that, good work!&lt;/p&gt;

&lt;p&gt;The second part added one simple constraint, but one that requires some work to get right. We wanted to take into account whether a movie was for kids of not &lt;em&gt;inside the type system&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Our answer for this was to recreate the scheduler function above, and to add the logic for removing those types during the type mapping process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;MakeKidsScheduler&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Field&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Tasks&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Field&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;Field&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nx"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;forKids&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt;  &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of returning a &lt;code&gt;() =&amp;gt; void&lt;/code&gt;, we inserted a conditional type in the return position which first checked if &lt;code&gt;forKids&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt; in the original type. If it was, then it returned the function - otherwise it returned &lt;code&gt;never&lt;/code&gt;. Returning never here would mean that the function would not exist - removing them from the mapping process.&lt;/p&gt;

&lt;p&gt;The community came up with quite a few alternative takes which provided type safety inside the functions and used different routes like &lt;a href="https://twitter.com/danvdk/status/1322546300617969664"&gt;removing the non-kids movie&lt;/a&gt; &lt;a href="https://twitter.com/RickLoveToldMe/status/1322321114132086784"&gt;keys ahead of time&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-beta#code/PTAEE0HsFcHICcCmoAOBDeAXUkBmo1RNE0BbUAZwGMALRAE2gBsBLAOwHMDRTIA3FsjYsONTABpQAI2jYKkUokhtkaKlRb1EbTGiZMAngCgQoKsoqbESekTo9+g0ACIAKvYByIsaQzIAQoi4kEigAMI08CwUmL4UzkSQ0qqgNHpMkADuiNqgJmC8AoiSmTQstKAs2EjpBpUUbLCYAHRGRuZsMQ5FFK6QAMo0WaAAvKAA3kagqelZOWwAXBOgwfAA0poUS7h6FMgAvuJToMKisX4A8mwAokyk-ZhIiJhL4yshG-RbK7sHR9NDKjQCgABUgQO+b1Wn2+j2gf2OmDoAHUQjFkVVaK93utNks4QjphQmDkUAYABKQfRZbHQvE-Jh7UD7Iz7AgUMwWTBtUzuRB1DiQbBoTJoOqZKo0OzRIjwNB8RAxOpSRBUNDA5AGGAzBWUBTIAAGaDYBgNHPYdmQ+U5WikaCZqzMNUw7C4SOQ1DojBJ8GaoAAgmxQBc1mZ0jjuLgWPAuugKBRJDJuaZsggPWkopwbcgJUicO6YwQ2LZRTpEslQIgAB4oVgaFptTAGFDIACyjkVoyIzaU+EKgl6AyGmSMTZboHbRS7UI+9KkkCpJCDLLHbY7HjIyDGAGt+XgJx2KABuHlgVyIUi1tDESiPV0c1jEOWM8taahRFWVtRS3QUbejntQAAcWeAAeVxKyrYhiw5GJMw4AA+LtQANDhngANXJfoADEQgAEnGNUUCqPQWAAL2QVx9gNADx1bNBdzBFBzHgNhwMg6CvlveCkLGFDfEYyBmJCNhcPgAiiJI1gKNAKiaNXUAQSYMV2OrTjYLvTheOmA0rwMCS0GI3RpMo5kaOtf1QGgYRlBwfB3QIeddUfaw9G7FsKFoyj7W3ChVKg7QuLg11tJAzBwKQgAfCcGMQJiWLY1wosU5SDAixtAPo3d+loBhmGscCe20yZpgAbWwwQmFsC1dy1fBXEA+1ZJ8vyKsQKqOMCjT4NAAB+UA2o6pYVAVeAEIAXSWUAAAoAEpRiQvhIE0E99hPIxcGsqgXVsgTEByr18vgab+0VJZJwHWbztig68p9UCLsVJCSs5To5Fy70twmNkmuNYxpkdaaOi6U67ODKQACtVRaWqKBOw9Zvml7pmmYHsEk4yN0ULtTuaWgMH9TBpoABlm5pMEgABVFAW3gMJ7UQObQAAam6QRmmJcpGYARlm9aUZRz07sQUrUIwrCxIMoy9CxxBqPGrsmZGZ6WQFokPvy0W9vikTJcIwypNl+XFfm5XvuOAWhc+0W9Klw3N2NsYlZV44WWOJBMGgVjKA1klWVPcJnU7QgraO9ouTZxAvDOHGbt96x4Z6PpBiyWaA75INw3dB0tp2zoCFCdUKd8F01X0OoqCD2wjFO6OxGaNDMEwnCQnJWZsm0Oaa-XbwWm1oSErEtvqQ7tgu9r3vmj04eMlHrvrQ8IVuDSEf5kjgBCWSylgoZmFsT9CHMS8WB9St4HgEJu6KOuWkb5uxJv3wkECVZEAiKIYjicee7OZp++E1iD9e5P0QC-EIb9IjRHOHDNOE9f56Ufn4MBSB35QK-mnK+ggb4N3Fi3eAlIIRgghN-a+k9-6D1buCYERDgQkKwZPaeVDQRMPngHfoKBlo+g5MaWw6AsCgAAExgyRDKfG+htBoQLsgFUs82hyPkdaMITB4SgG5n6dwoiV4kk4NI6AJ8uJ4HsvYZSXRlDFFAKUcoUoZD6I5IY60DkTHYDMZIZ4VBmgeIUfI0wSiVECPUXQJkwVOCGHcgwFYucWC2TYJuDkaogwoAvnaKQoTPxpGLCSauKZJTcBUJkFYJBPahFwBfcgDUWw5SiCgbAAAWZo3MvFeNMAAKmaSCDA2BMCZEgK0gOUBoA6mQA5cwWhywhA4MaciQz7AUE3D7Q6JJEyyAsTk5QoTtybEjhQVopgACSmBYD72QBwZ0lR8BagGeYPeBAaahIcrM7Gq4OQAFppDLLWeKOgmdI7WjSByFUuQtBUGUjYcsB9QAbK4rjORCksqIBhLdT68BCotmKsccqlVqpBlqvucpqgOSuBaqBQatg1JdW4q6PqA1MWgGGogUaE0poW1kj2DF7V6AKzJTBZYdIvj4ngCotk-UZqm0WstWwdLRqrXWptNg20olBj2p8RFR1E4DnOgja6u4EXx2Raufcp1Bwp0yM9Y4aN5nC2nD9bhJp+YRiBhHUG+4LiQ2hs0WGarFSIwmMy0wAABTAFBnkiDYOA5lLB8CeqNcOUqp1xrNF5RQJGzLUYRwxjLOZYxcb43gITEmZMKbU1pvTPYTNWa405lQHmfM2hqwtdbMWTcJb4X1tLJgRsDQKydqK82dbQ4ki1rFHWgCW3pvbQ7TtJsFq9rVv2kWulUp20xhOrtIrp3jFVnW5krt5HTA9l7IMc72QxW1ZsFV919V9kPMnYcCF-bWgzhYr5FjkBpF1MaHArrtpPqsVZPYHJs5DJ7J5c1kKKCPRvrHU99Bz0J0NTe1ObDd4dR2CfIwYGIOTzvs2-B7d5hdwwz-eu088OdwwaYFO1y4yeUI6Q3+2G8EEOoSwtOtH6G-3IbrShhCWPoc2Jh+BqUmPMOIRguRFGOEn2sGYZRnYZFZEadaNREBtTxNAEgZ5GpQAXPgEQC8V4bwuWfGEhMbzsAXJODkWwhA8k8EMi2Wwq5WiKetP46lxZKUOSiDHCgHDsCOh069egVQFVuRlHeKg24DBLM6XQQuSBGidIXHZk0qBICWDzp5UwKNSjWE1Kpj9Wn3SkGc4p0wABmP0-S7N1BUOEimNzax1DQPQYLec3IdEeGgdggbyyBd8DTergESkKEtCsaMpiVBGCAA"&gt;Our answer&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Share Your Experience
&lt;/h2&gt;

&lt;p&gt;We would love to hear your feedback on this weeks challenges whether good or a bad! If you can please take our quick 4 question survey that can be found &lt;a href="https://www.surveymonkey.com/r/FSQ7DLC"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Want More?!
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about TypeScript, check out some of our best resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;The TypeScript Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/play?target=1&amp;amp;q=326#example/hello-world"&gt;The TypeScript Playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devblogs.microsoft.com/typescript/"&gt;The TypeScript Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Typing :)&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>challenge</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Type | Treat Challenge 5

</title>
      <dc:creator>Gabrielle Crevecoeur</dc:creator>
      <pubDate>Fri, 30 Oct 2020 21:06:05 +0000</pubDate>
      <link>https://dev.to/typescript/type-treat-challenge-5-40n4</link>
      <guid>https://dev.to/typescript/type-treat-challenge-5-40n4</guid>
      <description>&lt;p&gt;Welcome to the final Type | Treat challenge! Today we will be restocking Halloween candy and identifying Halloween movies&lt;/p&gt;

&lt;h2&gt;
  
  
  Yesterday's Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;We were looking for using the &lt;a href="https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype"&gt;&lt;code&gt;Readonly&lt;/code&gt;&lt;/a&gt; utility type to force the type to not allow poltergeists to make changes to your rooms.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- type Rectory = {
&lt;/span&gt;&lt;span class="gi"&gt;+ type Rectory = Readonly&amp;lt;{
&lt;/span&gt;    rooms: Room[]
    noises: any[]
&lt;span class="gd"&gt;- }
&lt;/span&gt;&lt;span class="gi"&gt;+ }&amp;gt;
&lt;/span&gt;
- type Room = {
&lt;span class="gi"&gt;+ type Room = Readonly&amp;lt;{
&lt;/span&gt;    name: string
    doors: number
    windows: number
    ghost?: any
&lt;span class="gd"&gt;- }
&lt;/span&gt;&lt;span class="gi"&gt;+ }&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's worth remembering that JavaScript doesn't have immutability like this, so this really only affects the type system. You'll get a compiler error, but people can still work around that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEDkHsFpIOwKagNZ0gdwM6nQCwIYAuoAltgOaQlzmjwA0oARgK7ECekLohu1yoTiwBOOSMOQAHADb4AxkgBQIUtgIs4hBABNm7UPlCTI0rcPIIyhAHSgAksWTVthzCznJM15WB+gAmlyikEwAVghyhNjICAiSoBaEhNS0cgQ0OswIfHC6vEiYCoiY9H6YhJDxvGSgAGbCkAC2oASSkghwKXqgjfhONIJBdGERUaDCCPja8NLsfhWg5ZU8fNiYxpDI+kzZ+ABuJOLeioTs7aAASqPi+gC8l5PTcLMAPADeiqDjkE2YAFyXH6NADaAF1PqA0GQEP8DHB2GDFABfAB8ihOZyQFyBoHuVymM3Y7whcHwjQQAPKwhSEOm4lhcBYjR2wgh6GcGAZTJZEPIuEg5QA-AD8PDkWj0SpcElJH8QOgFdYNAgAB4yfDUHTlFi1WrWORNYAAcX55Uw0FF2mgAAV0hVGphgAAxMlcc0ACXwGi0VvdbphFtyNtkCnNAFFJOhxLxoBNIjdrNLGtJFAa4OVQHEo8JeFd48I7qAPl8pTL-iAs9H+dJtHGKgXrOJyErkMBKzncLAa7HrgWu9pgAdMCRCIOSDmWPhpNAKiJgBCGr8AcCIV83pCyRTQAAiMOaYSihSgT3SaTbxh04SwgCsjHZuU5AIATKAkaUvmuN+SAduACq4JAAGkRzSDpz1AS9YSfO8OSwAEAGZX3fD911Jb8d2tfBhGkIJwMg58YIfODQEQt9VyLL8tz-ACIBETAEALPCfivAicFg2FSOQz80Ko-8kAAQSSEg5CY+lWPvaZiIARiQ8jUM3H8+NAABlQgWG0dhRJY0BoLYoioNkj8KJ4n8AFl8HKBjQAAIR0RdGi02EpMIyTYQAFkMlDKJ-WzaxxJ9HPE9iENfCFwSRdE-H-GoDW0Ap+RYGtQDkL16OSppJBIaQrIYhor0UWoNEiQ44BaL1NAACjrG4ATzet2AASiLCE0wzezcXGXt2GsezMGBczeGsWocPECqBtwHrLSaCqmoAKk6-Nut66xspoXgGtBABuBcgWsPkBWIe55PQ7cAHkkoAKQQXUJk00KIqAA"&gt;Our answer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;This challenge evolved quite naturally from the third challenge with the addition of 4.1's heading feature Template Literals.&lt;/p&gt;

&lt;p&gt;The most elegant answer moved the return type into the object &lt;code&gt;const winners&lt;/code&gt; which would then be inferred as the return type of &lt;code&gt;tallyPopularWinners&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="p"&gt;const breeds = ["Hound" , "Corgi" , "Pomeranian"] as const
const costumes = ["Pumpkin" , "Hot Dog" , "Bumble Bee"] as const
&lt;/span&gt;
+ type Breed = typeof breeds[number]
&lt;span class="gi"&gt;+ type Costume = typeof costumes[number]
+ type BreedCostumeCombination = `${lowercase typeof breeds[number]}-${lowercase typeof costumes[number]}`
&lt;/span&gt;
function tallyPopularWinners(_breeds: typeof breeds, _costumes: typeof costumes) {
&lt;span class="gd"&gt;-  const winners = {} as any
&lt;/span&gt;&lt;span class="gi"&gt;+  const winners: Record&amp;lt;BreedCostumeCombination, ReturnType&amp;lt;typeof decideWinner&amp;gt;&amp;gt; = {} as any
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-beta#code/PTAEE0HsFdQc0gF1AJ0gBwKYBNQEsA7RSURAC01AGNpFMBnZMgQwBtXIB3TTA6yALZZEeEZAIAaUACto2OITgAoEKGyQ4cAJ6gW7Ljz7D+jaAIahmycpWYEC0NqHTMUzbJgB0oJUo9VWV0oAM2gCKjE+fzwPAHVCAkwUAAoAIxQebAAuUEYURSkqSFNzHLzFAEocgG9QAmZS3MR8gjgpADcYzEgy5sVQAF8lTkJ1Tk9ouISk0ABeXMFuxIBRVnpMABFMKi76X1UAeTIpZgjHdh0tGDUYggByZABaBfNxSkw1ygRrEnVSClAoT4qVEnjBKjAABUyDA4GRQFdYFQ7KBOFYqPDRKBxKAAF6QQQ5MiIRDoLIgTiUzzEIQAa0I9HoAEdHBl1HAUGFPEUBMA9BxuLx9mAAJIERiYdxSRF3dqUVKGSz0Wk4UgkCisdCkNisHTQLXMXJFDKpSCuXCQYL-SgCYrICHODDQQIoEyIMwWU7G7D9YjW0C2xiO9DO1ygdKZejeKDQWXy6B4ViIB0wZCGll4Ki0-BCViYcxEKx4HEKgVSVK0fDIDjreikLRYfAEYKQFACIviTzC0AAOS4-qKRAYyDwdcgcpQ0uuwR4rCrdzriNd2FoOj9GWCp2IrvIo4dRQ8atQmEQzEI9cbhBbbY7fGeMrluklKFw5Cs-oALJ4AIzhk+GwgAjkBgHXoRZd1aVEyEzeENXQOsRnIC9+nKSD2wIPAQ0CSIuyUQcgwjHA63mABtAAiAAJGACGwMjQCkMiAGFWwUOiGIABUWNwMLsMiAF0lX4cVk3w5AihKCxSLI9izHQekCDY0BKKQUANg0RSyIAITMVI81ATSeH4wTRN8RAG0oTSMlVeYzKwS1wys7B6BIhwBAVFA+KUWzKGYiS5gvborXE91zGc1z3M87z9Mc3yQswZi3MIW9-IAAwAEmqAUkmRdYAvswinJcnSkj4gZHgyrKUByyhvPs4KPTC4qPIGFLfCBCJiz4U8Lk4rDXHiewknoZIAH0CvoHJaqtcapBG+rQsm8y6rtBqKlAaolFAISgxGQaUAm0AACVtlbbAAB5LMyWKPQSkF6kiKRjvdFACEhcyzqmtRti6AbEhQAA+f7-OqAZBLsLRfC269QGSUSHMybErTGxz6DWjatqh1sYbh+bKHsuaVtCtHNoxra4ZiVKMoKsqMtxlrqUgAAZAwUEY5h1mSNb2eiq7CfiwQ7tvEnSd2v7nJiAT5kmTBfqSNJHMKPmKmFwYSaGEmMmevhRaGpR1dUGNqBRTkuugutMAADwadA9PPU6Zj9dZKE4FhrABegWEbeybDUKxDQ4SBaTrVg8BVctaAdH2MnoZ1kBGdhdGYR8VS0BDoIxSwMlASrqtwaHMAnHQBDwC3Efh1U7FwXGpC8OAsm7DbVFJsiYTCbBHhDOlCDImowU8AYJAdZvW5ox4YWQdke-WvuB6HjGW+o9uKzcvSFUwKfqhnwem-n40FA72T5I3me562vuHXVuGdf2-zut1XrQxQWX9vlyNFYk1G8PEMC808Dg4GSNfT+Dp2Ls1rMMaY+1yIj3bp3OS3c+KeHqOYbsABlVurA85nlYBAvazkyJwPkgfLuClEGdA8JANB6BICJiSHgYImZSCYTrKWLg9dfAcM4Rw1Q34cjQlHOGBMmCxzBCtF0bmwQ0ACF9joAAzFIF2MFBGJicmXdAGROgwDrNgZgqc1SUK4aoAATHwgEeBcz5l4KeSIqJExzgyBmLOKIUrsxStiHcnASBsHZuHOOoh4RgRQTvVErZsyIiNkYVwIgdQ6AYTRSwfA7D0G4CgLhnDVAAFkzwEF1DIaAQZ3A+kgumBMWYcw20sYWB6Cx-jvnCciPgJt-T7kgIeZgppHyIVbmmZwaBdL5nYe1GxgSliYFWOsLYOwPDDWRpkXoLQ2igAJhJeZlQah1AaJgVZrQOhdB6E0BZgx0YYwNgwE4CcbC5XZHWFgj5DTIOdunTEdZZAFKfBbA8XgwSJzICrOGcBeCHTsBRS2-lkj0DwLiLZdQmprVmEDEifcACCKA3BaHBZCzAFREHtnQMkTmcwgZZPIJ4YIAcUjErIJ4bi6gBAEoAFSgG-AANgqAzVBfRWjJBZRUNl0gaEEGSHcO4FQADcKtNbQBeutFWpMHk5ABQQIFBAQUW2SKywepNSbkO6AqwFwLLbquVqTIYAwgA"&gt;Our answer&lt;/a&gt; Also, we watched the full two hours of that video, and it's a great background video while you're working.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;You're in charge of restocking the houses on your street, can you find a way to reduce the duplication in your notes by generically declaring a house?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEHUFNQCwQwG7TqAzpALqA9gM1tgK7qo4B2oKqGATpJqAO4wCWAxjAFAigDmLSUkSxs4ZACYBPShJxtRqFtjJwANqull640nQC01bGwDWLMrwB0nbmAAqrUi1JjK8wjTgZodAA510ZBieShR4oBgw0DBEJDagAEaEWBGQdADkzqCq2Fhh4oQ+quyekOKgbNji0GawqZAANDJlcZJETGLJ2OV0JZThkj7QzOww5USqZb7+kIGgcWLS0cSQVnEAkljZ2MakRcbQKeQa4azmTKwc5fDmkKTxmIz0ZHFLJKBOJ96Y7hQIaoTQMIAA1o7GMAHkaLYehggU04odcCwaNRQD44B4ALaYVI4fBA-wYIzGIEWOZxADCLlahFAyz6vBmqXY-UG4S6mLg+z6QIAEjFIHCMANoHFhpd4JlFOZVMgaLxCNjZrhsDRPqA6BgfqA-qoAXMeMDQSZIdDIJ44WIyod0Vj2aACbciSYgQB+azCtkAMWR1H59IAvKAAN6cUCgcTYVUAOUV9xoAC5QABGADcYfCNDBpphAAoAJRJgBE8SjxiLoAAPqAi6IJJIi+nw4TibmWF5Mahi6XthXq7WrQ3CzrsCxxOmAL7pzie6AAZUgFQk-vQoCDofDkZjcdSSYATE3M9moXnh0WiTkYPEaMQYH2a5izBhUI2My2TG2O12axeItfb-eRaPoEL7Dggo7jpwU4eiKoD2Mi4grtA64ZluNCxpi8ZJgAzIexoQie5oYAWxZ1lIgFwD4hSQIBkZkEkL6Hu+xifpAnakYOFFUbKtHKAxRZgRBk7TrOoBekQNAREha4hqhUboTuiagAALHhWYmoRngkTWZENlWNaoD4ZbSIZY6pIxb5Oq27Zsd+A71oBhnGWgPhmSiAlJuBY7CTBbJzrQ9BYEGADaPoohgSGNAuS6IQKjTwTQsXLI04nuFJAoALrpkAA"&gt;Help keep those houses DRY&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;You're working on a horror movie night. You've skipped the types because you figured it'd be simple to work with but someone put the wrong movie in and The Nightmare Before Christmas is not a halloween movie. &lt;em&gt;It's in the name&lt;/em&gt;. Anyway. To avoid this happening again, you figure it's time to add types to the function. Once, you got that down then you wonder if you can do the same thing for the kids schedule?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-beta#code/PTAEE0HsFcHICcCmoAOBDeAXUkBmo1RNE0BbUAZwGMALRAE2gBsBLAOwHMDRTIA3FsjYsONTABpQAI2jYKkUokhtkaKlRb1EbTGiZMAngCgQoKsoqbESekTo9+g0ACIAKvYByIsaQzIAQoi4kEigAMI08CwUmL4UzkSQ0qqgNHpMkADuiNqgJmC8AoiSmTQstKAs2EjpBpUUbLCYAHRGRuZsMQ5FFK6QAMo0WaAAvKAA3kagqelZOWwAXBOgwfAA0poUS7h6FMgAvuJToMKisX4A8mwAokyk-ZhIiJhL4yshG-RbK7sHR9NDKjQCgABUgQO+b1Wn2+j2gf2OmDoAHUQjFkVVaK93utNks4QjphQmDkUAYABKQfRZbHQvE-Jh7UD7Iz7AgUMwWTBtUzuRB1DiQbBoTJoOqZKo0OzRIjwNB8RAxOpSRBUNDA5AGGAzBWUBTIAAGaDYBgNHPYdmQ+U5WikaCZqzMNUw7C4SOQ1DojBJ8GaoAAgmxQBc1mZ0jjuLgWPAuugKBRJDJuaZsggPWkopwbcgJUicO6YwQ2LZRTpEslQIgAB4oVgaFptXDQNhUF3KHhoADWiH6tAYzGsAApCoJYQYUEp8CPFX1BlkAJRLY11SbTDpdT39kmjCZs+1F4zTR2D9fYaeVIMXKQAK1VLW7Bgow8civn84mxzXXLDKCqeg8ZDIGM07NLQGD+pgg4AAzzs0mCQAAqigE7wGE9qIIO74ANTdIIzTEuUGEAIzzgA3G00xEn23qIAA2gaHDPAAauS-QAGIhAAJOMaq-roTAAYo+wGgAujumGjAAfLun6UNRA70b43Zgig5jwGwHHwNxvF-gJgHCWJYwSSM0njCylFyV6CkGrWYraWgfH-vponie+JkydMLLHEgmDQOpllbogrI8mAYTOoq3CbjR8DtN+05eGcO5KT28k+s+PSzkMmTziFoB8kG4bug6zatiwFgEKE6rwb4LpqvodRUOFthGPF3gtIxmAsexITkrM2TaJhLUvglYjNMlKlqRpPV9fMg2tWczS2RSM0DTl1oeEK3BpNS-VBtOACEeVlByFBDMwtgqtw5ikL+PqVvA8AhENRQje1zGsZpr2+EggSrIgERRDEcRzcNbVjV2iATSEU3wF9fi-SE-2RNE5xPjl82jUtcM-UEiMAyjwNrRjb2dR9PXgsCHEQiDL1g+NkCqdDmmUhCYLU+joMLUtLPAmzwKDW01r9CgkAsD6HLGrY6BYKAABMOD4EiMpgfo2iMRVyAqhkmSC7rgumGETDwqARF+u4yvbSSnCa9AYtfAriv2Ew9rYMoxSgKU5RSjIdscnguDWu6oDO10buSM8VDNFHeu6wbRvILLZt0EyMSZhwhhEOODArCVbZBmwgEcmqQYoI9dpSBnl1pMWJLNSmkrcComQrCQvmhLgj3kK4We9lEKDYAALM0RExzHpgAFTjyCGDYJgmSQJPuVQNAOrIEH5haOWIQcMaLAAF5r-YFCAQFNGJrIHsN8oGedpsuGKq0pgAJKYLAF3IBwzqVPgWor+Y50EGQhnIOx9FCZwnByAAtNIC+19xR0AKvfa0aQOQqlyFoKgzsbDlkuoQW+9sQKCybC2POHZuyfF7FZNK04xwTjwPfXoAwsqLgPB+L8nQ5CpSArudkB5jjHlPPfC8wYbx3maA+J8NC3xsMoqYAAApgCgkCRBsERrJFg+B0qjkylkWi04RLNDpF8d8q4LKcg4T+XSgluEgTAvACC0FYLwSQihNCewJI4RAgRKgxEyIUTMVFayHUuqaXso5PSQkXJGTcqZcyASuGKQhlDdSoSeIOSsc5QyoBjKxNklRKhdEbLOwMGEjJkSsk5I8pROJXlpg+T8kGQJJJgrWnyh7BBHtkBpF1MaHAojWztK9qADUHIipryzhQWKFj8EUAALKczEElCGFCuHwC0TOJhC5cpzgATsMWRgZnzNpgtYJZN4C9R2rNHKhyFktG5itNgAtTA7KYFLe0kybnHNGqc7q5yKYUCpvza5mwjmCFeuDZSDNJrM3+XzNGByQW3MWsUnmoJ-kC31mAYWos7qYPhKgxA2tR7WlNhAbUxdQBIEgRqUAv94BEEQDdZ2xBg5VGsHocBipz7YF-icHIthCBNw7MhbOmAs6tGJdaROoA2LsHoK6S0lK2qUBFtgR0dLzHyrzhymUjxyidgMNyy0lUkCNFnpAJIvgTSoEgJYPOkzTCUVKNYTU5Lek0vdKQCVxLTAAGY-TLw7HUFQoqkgOVrHUNA9AtVlQLkwcxjw0DsEUeWDVvgRW2DFROFYndFVRhjK7FQRggA"&gt;Help type the scheduler&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Share
&lt;/h2&gt;

&lt;p&gt;Be sure to submit your solution by using the &lt;strong&gt;Share&lt;/strong&gt; button in the TypeScript playground.&lt;/p&gt;

&lt;p&gt;Then go to Twitter, and create a tweet about the challenge, add the link to your code and mention the TypeScript page (@typescript) &lt;/p&gt;

&lt;h2&gt;
  
  
  Need Extra Help?
&lt;/h2&gt;

&lt;p&gt;If you need additional help you can utilize the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;The TypeScript Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.com/invite/typescript"&gt;TypeScript Discord Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The comments on each Dev.to posts!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Typing :)&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Type | Treat Challenge 4

</title>
      <dc:creator>Gabrielle Crevecoeur</dc:creator>
      <pubDate>Thu, 29 Oct 2020 20:27:38 +0000</pubDate>
      <link>https://dev.to/typescript/type-treat-challenge-4-4dal</link>
      <guid>https://dev.to/typescript/type-treat-challenge-4-4dal</guid>
      <description>&lt;h1&gt;
  
  
  Type | Treat Challenge 4
&lt;/h1&gt;

&lt;p&gt;Welcome to the fourth Type | Treat challenge! Today we will be stopping hauntings and putting puppies in their place. &lt;/p&gt;

&lt;h2&gt;
  
  
  Yesterday's Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;We were looking for some pretty simple types in this challenge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Treat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;treat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;treat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;candy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;baked&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Trick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;trick&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;trick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NoShow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
 &lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-show&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can safely and efficiently reuse the properties in each field by &lt;code&gt;extend&lt;/code&gt;ing them with an interface.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;treat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;trick&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-show&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Treat&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;treat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;candy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;baked&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Trick&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;trick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;NoShow&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;trick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can specialize each &lt;code&gt;result&lt;/code&gt; property with the specific value a &lt;code&gt;Trick&lt;/code&gt;, &lt;code&gt;Treat&lt;/code&gt;, or &lt;code&gt;NoShow&lt;/code&gt; will hold by re-declaring it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Treat&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;treat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;treat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;candy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;baked&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Trick&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;trick&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;trick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;NoShow&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;House&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no-show&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which would give the exact string value for &lt;code&gt;result&lt;/code&gt; in each type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcHIDcCmoBGjEDtQGt0AcBLDAc1AENQATAsgJwE9RIAzUemW0AF1oIGNsTTj0RkuAKBChaiAM7QANl1mhmkTu2idZIxFwA03ABaJGxTIlpkFCxs2sLQRLpFCSwXIzOR8xiYuoEcgBc3DJisoY8-NgqZBiUoBiQALSyRpAA7rIAdOLuoADC8WwwoAC2ZLjG3tz0eHKgmUb8RqC+WJRyfLxoTMwFnnLIMvJKsgD8+eJc9cgAEjCyyAC8oADe4qCgCpC+XASQGKE6vCRb0nKKXKEARCJit6AAPqD3vAJPr7fJaRmZt3EAF98s5LPY+MgACrhLigRAADy4mEoKkW0GWG0uYxubweXFuUVhoXW7XilHoJ2iJEMKCqiEoEypZ1IQNAILBtAh0I+gkRyISaKWyFJo2ud2inyJMWZRFZ4k53NAADlIABlf7wpEooUYkXY8VvX7pLJPEHiPhHHRhUTKUIw20AbQAuqA1o6LqTdvtDsc3ujMQBGQkGpQS2Eh-EkskJSlvAAyvtAACE6Gb2fpPTs9mJfXcA8gAMwhsVhvERom26MdCl3ACydBUqdo6aBme2XpzByO+eFoAALCWrmX3rbI8SsXTcJQ7oVIJBsEFZCGa3HbgAldDLWDL9ns8TO-KWjDWyWxe28l1u0AejvZn09-19gBMQ5x4Zi45lbwbxH4ZvbLFvVzR9bgLUAAHY30Nd5P2lAQ7jVLQ8F4ZZKDNA8jytOFkg1LJZFCVU8MyK93SzYDuz9MC+wANmgkdjX+DDDwKVVMmMMRSmgUAjDIJBjGQWYGkiGMuIqekBPKApkjhShoDwBR+D8UBYAo31YHIBIVNLLgNJQRgMTlNwpAoaAMCTNROFgHSNPJcgkkQdjOWWPhKLqBopiAA"&gt;Our answer&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;This one either stumped people for ten minutes or was considered a breeze. We had a few different answers in the TypeScript team, but we think this one is the most elegant.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;who&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;loot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;TrunkOrTreatResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;trunkOrTreatSpots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This challenge was a great reminder that &lt;a href="https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeystype"&gt;a &lt;code&gt;Record&lt;/code&gt;&lt;/a&gt; is simply a type-alias to a conditional type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which can convert the original answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;who&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;loot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ResultMapper&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;P&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;P&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]]:&lt;/span&gt; &lt;span class="nx"&gt;Result&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;TrunkOrTreatResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ResultMapper&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;trunkOrTreatSpots&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;into code which is both easier to read, and requires knowing less language concepts. Kudos to the folks who made it seem very easy! &lt;/p&gt;

&lt;p&gt;Here's &lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-beta#code/PTAEBEEMDsHMBpQGEDyA1AkuAjATlABaQDOoATgKaQA21AnqAA4CuALqJKAEYCW0AJqAD20UKwIVQ0SK2aVhAMzFkeAYwDWwssqqs+sAHQAoEKACaQud2pCNhEsMasAtBUGshoPsVZVB-T05WMmZoTSFtYN0vaB8-YxMwDFFOEOICMU9GSkZIeQUIsQlQCgA3CmhWRDpLezJ+VSF+NyKKRPIKYmZqVlI+D1bQAHIAFRCwlDIx3QAlTu7eobE6RkkAdwI1DJ5SGkpIfjp2y3YhJX4ZSWcvViHSAFsd4n0OUAUKNaYyIVWyPU6AITtJAwUA1ZgdNYqXzDMahdSTaYyOZdHrEJYOUFCLgAKwoqnYrBWknEMnaPkgdD6omIdGgqlAax44kGPhUcGpw2C8MR+1YAGVGEJFgB+IxGRqxQnjBFTPmC4WkAC8oAA2kZQLDigAFPLqIaIDXDAASlmIkgAxNgDaAjUNTcxzaALQAmA12pARaAUbT8gg-d2aoba6iQVSSM6gADqEXSPEY7oAuhxSJKfOKiatQCiFqAVQBvI2agLegBc3CEQmoVGg8CLjP95bZ+jrms1NmF5bmjXqAB5m3BEDA6AA+IwAXwzxNAcImctm8zReez+Ii-F7mYoke5c6RAqFvVV0GY9y4PsTiBzPTHRgUoQJPBEoHukHUFBGKHAKAAFMQD8Ry03bcZV5XQFV6ABKctZ1lPcr16UBCzbDpZDIGl-wMSh+GYcNv2-bIykQVQ5EoSoILzEdEPrZDKFQ0QkOQxjNQMFiCNKVsmMY1ViLIUjWETcsGM4ziSwocsFBoc0OOEpiO1YQTx2kmTkI2IRywAInU6jOMnYTdLbRTEPHFMZxA+dkUXSCJ3FUwLAhVRQTYngPkGShUQQ0oeE4dSZlCdSOC4IRynFNNCSaTwVRfN8Py-b8d1g+V-wgiURGIKsKAMGxYDi8LkvaGMyHUYgjA8AJVXUkYdT1dTEwMUTl25Np2j9SxqEEAr1BK8Lys9NCfVAFrGBqzLK3YAtJ3aAAxSAeGoYrSqEcqHSdC0AGZhvqlUJLmprmqFWafWcHYMh+PQRBoMR412eROHeT5qD4TpuAoGxPnEHZbXFL7vpssAozyaB9HLBUDrIYrftAbADBnTY+l2Z9IEYVZ3GJUhsmxat7h+9oXWhyqfUkD7OFCsgZsqYRRHESQXyRlpNw4MhYBPCpWGx0xVuhuzQAc0RKGcR1JE4XI-kUQZfFUAhAYAR2YSQFG+e5BjPWA+G9bQJZoas4EkbBMlAWAKEJYoKAADzDdg3ypN4FfaNsqYZ0m6HLAhWFYRgAJAZpSgMDxgE3YhVBUJw-eJZwohkZwNdoCoDecF1nFW6BsAANiAA"&gt;our answer&lt;/a&gt;. Bonus: &lt;a href="https://www.typescriptlang.org/play?#code/PTAEBEEMDsHMBpQGEDyA1AkuAjATlABaQDOoATgKaQA21AnqAA4CuALqJKAEYCW0AJqAD20UKwIVQ0SK2aVhAMzFkeAYwDWwssqqs+sAHQAoEKACaQud2pCNhEsMasAtBUGshoPsVZVB-T05WMmZoTSFtYN0vaB8-YxMwDFFxSRDiAjFPRkpGSHkFCLEJUAoANwpoVkQ6S3syflUhfjditIpiZmpWYkSYjw4xOkZJAHcCNUyeUhpKSH4GS3YhJX4ZCkRVGFBa5nIKRmpIVUlUvtZhyQAVELCUMhvdACUOrp7QUZ5xYWhJAFtIIwRoJKnpKPRQAoyEI-m1zpdFKAAAbBULqe6PGQAZUYQh6SIA-EYjE1YuxUXcHnNWDi8aQALygADaRlAoAA5FcSgAFfLqdmIVkcgASlmIkgAxNgBaAhezRcxxaAJQAmAVypARX7aLEEISMdVs9nco4nREAdQiGR4BvgRgAuhxSKSfMSLiNQDc0RjqS9Ot0GaAAN5CtlMgDSMVAAFEAB7BY6sAA8AAp3RQVspvVTdLSegBKJnqCi1JTpzMU9E57G4nr2xA+FRwAB89oAXMHQ2zuwFfh2uEIhNQqNA7d3xx89R3G-oxxO2TY8R2Xk0GkmZ3BEDA6M2uwBfIx7gDcxIUoVUehEoABxauKHAKBTxFrxA75bLtyrmJpL-zHa9lLfn6bykCG46ULIZCiM+dIGJQ-DMCcKYpjk5SbHIlBVPmoD0s2nbzmyEFyKIYEEeOBgUahZRzmRYaqBhoLtvhtHzr2FAdgoNDijRLHdourAdkGe48bxk5CB2ABEEldmRB6yfuiBCU6nqfj6zyvAG+aHsSpgWHsWyiFRPAUKMbT7P67xlDwnASU8oQSRwA4VMSLrks0niMjeFB3g+aaqdWP50lpLpDhQBg2LAabuVpfSWmQ6i9B4ARMhJXKSLy8USfaBhsThWYUDpYC6pY1CCHF6hGElQgpZqUEUDqeqMFl4WDuwjJCYVoAAGKQDw1CJe5KUKkqEoAMzNbljKcf1BWdbSfX1c40yZPql7SNQYg2jM8icAoJmgNQfAdNwFA2KZ4jTLKxLXTdnXmvk0D6B283DmQvSddgBiehMpCXZwAJAq06akDkQhcMOfy3X0KpfWl8h-aArlkL1VQ-GZAPAkMHr5LAzB-KCUOmKNX16VIFCtNsfAtLGrSLuozCMFkpTxsjF5mRQsaJqAG6wEAA"&gt;the weirdest answer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;Don't freak out... Ok freak out a little bit cause WE ARE BEING HAUNTED! And &lt;strong&gt;they are after our code&lt;/strong&gt;! We have tried everything but we cant seem to get it right!&lt;/p&gt;

&lt;p&gt;Somehow they keep manipulating the objects set this &lt;a href="https://www.typescriptlang.org/play?#code/PTAEDkHsFpIOwKagNZ0gdwM6nQCwIYAuoAltgOaQlzmjwA0oARgK7ECekLohu1yoTiwBOOSMOQAHADb4AxkgBQIUtgIs4hBABNm7UPlCTI0rcPIIyhAHSgAksWTVthzCznJM15WB+gAmlyikEwAVghyhNjICAiSoBaEhNS0cgQ0OswIfHC6vEiYCoiY9H6YhJDxvGSgAGbCkAC2oASSkghwKXqgjfhONIJBdGERUaDCCPja8NLsfhWg5ZU8fNiYxpDI+kzZ+ABuJOLeioTs7aAASqPi+gC8oADeiqDjkE2YAFyXb40A2gC6z1AaDICE+Bjg7ABigAvooTmckBcfqB7k8XnB8I0EF9ysIUkDpuJwXAWI0dsIgehnBgSWSKUDyLhIOUAPxffCQ2Hwvy4JKSD4gdDC6waBAADxk+GoOnKLFqtWsciawAA4szyphoJztNAAArpCqNTDAABiWK4WoAEvgNFpdVbLWDtbl9bIFFqAKKSdDiXjQCaRG7WPmNaSKZVwcqgOK+4S8K5B4R3R5AlR8wiST4gWN+5nSbSBirJ6zicii5DAXPx3CwAsB67JuvaYAHTAkQitkjxlj4aTQCoiYBAhrvL6-IEvB7ArE40AAIk9mmEnIUoBt0mk88YROE4IArIxqblaV8AEygGGlF5TmfYr7zgAquCQAGkO2kOtvQLvwWejzSWBfAAzJe143tOmL3guer4MI0hBN+v7ngBJ5AaAoFXpOjx3nOT4vhAIiYAgyZIW8e4oTggHgph4G3lBeHPkgACCSQkHIZHEpRx7TOhACMYHYZBs4PkxoAAMqECw2jsJxFGgP+VFoX+gk3jhDEPgAsvg5QkaAABCOijo0cngnxqG8eCAAsqkQbhD6GYWKJnqZ3HUSBl5AoCcLwioz41Mq2gFMyLAFqAci2sR4VNJIJDSHpJENHuii1BokSHHALS2poAAURY3F8ibFuwACUqYvJG0bGai4yNuw1jGZgvzabw1i1Ah4g5S1uANTqTQ5WVABUtVJvVjXWPFNC8CV-wANwjj81hMiyxBovZC4APJhQAUggCoTLJnlwkAA"&gt;snippet of code&lt;/a&gt;. Take a look and see if you can force the ghosts to stop moving things around.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;You've been roped into helping out the halloween puppy parade, it was such a distracting even that you did the minimum possible to spend as much time watching the show.&lt;/p&gt;

&lt;p&gt;Now it's over, you figure it's time to clean up your code and try get &lt;a href="https://www.typescriptlang.org/play?ts=4.1.0-beta#code/PTAEE0HsFdQc0gF1AJ0gBwKYBNQEsA7RSURAC01AGNpFMBnZMgQwBtXIB3TTA6yALZZEeEZAIAaUACto2OITgAoEKGyQ4cAJ6gW7Ljz7D+jaAIahmycpWYEC0NqHTMUzbJgB0oJUo9VWV0oAM2gCKjE+fzwPAHVCAkwUAAoAIxQebAAuUEYURSkqSFNzHLzFAEocgG9QAmZS3MR8gjgpADcYzEgy5sVQAF8lTkJ1Tk9ouISk0ABeXMFuxIBRVnpMABFMKi76X1UAeTIpZgjHdh0tGDUYggByZABaBfNxSkw1ygRrEnVSClAoT4qVEnjBKjAABUyDA4GRQFdYFQ7KBOFYqPDRKBxKAAF6QQQ5MiIRDoLIgTiUzzEIQAa0I9HoAEdHBl1HAUGFPEUBMA9BxuLx9mAAJIERiYdxSRF3dqUVKGSz0Wk4UgkCisdCkNisHTQLXMXJFDKpSCuXCQYL-SgCYrICHODDQQIoEyIMwWU7G7D9YjW0C2xiO9DO1ygdKZejeKDQWXy6B4ViIB0wZCGll4Ki0-BCViYcxEKx4HEKgVSVK0fDIDjreikLRYfAEYKQFACIviTzC0AAOS4-qKRAYyDwdcgcpQ0uuwR4rCrdzriNd2FoOj9GWCp2IrvIo4dRQ8atQmEQzEI9cbhBbbY7fGeMrluklKFw5Cs-oALJ4AIzhk+GwgAjkBgHXoRZd1aVEyEzeENXQOsRnIC9+nKSD2wIPAQ0CSIuyUQcgwjHA63mABtAAiAAJGACGwMjQCkMiAGFWwUOiGIABUWNwMLsMiAF0lX4cVk3w5AihKCxSLI9izHQekCDY0BKKQUANg0RSyIAITMVI81ATSeH4wTRN8IEImLPhTwuTisNceJ7CSehkgAfUI7B6ByRAG26K03PoKRnPE91zA8i8fLdD16AqUBqiUUAhKDEYHJQUKACVtlbbAAB5ULaSwCC0AA+OYYqGOLAVbUBklE8MMlVS1QFcur3Oi2L4vi68qpqoKPWxK1ArtSLWvK9qEpHXB5gAAwAEmqNyBkeWaevMAZJupSAABkDBQRjmHWZIKhG9qksSFKSJiAT5kmTB7NOtJmsKQbzEO0ahnisr4oyd0UD4E7HKUMrVBjagUU5SzoLrTAAA8GnQPTz0ymY-XWShOBYawAXoFhGwamw1CsQ0OEgWk61YPAVXLWgHTxjJ6GdZARnYXRmEfFUtAQ6CMUsDJQAFJJkXWXBOswCcdAEPAob62rMny3BlswKQvDgLJu1i1RRrImEwmwR4QzpQgyJqMFPAGCQHQ1rWaMeGFkHZQ2YuN03zfazXqJ1isBF0+VDKNsEnfVl3jQUXXZPk+3qkd534uNh0ypqv6UpKqzdRs0MUFuxz7sjR6JKivDxDAvNPA4OBkgTvOHXYvba2GaYztd7WQ-1hS+M8epzG7ABlLXWCFs9WFr5L6HIvW5MIJux5bzxOg8SAu-QSBEySPBgkzUhMLrUsuBV3xd733fVG-HJoVHcME17sdgitLo9sBNABHxnQAGYpDRmCz8TdypfQDJOhgOtsDMHZmqOe+9VAACZj4AjwLmfMvBTyRFRImOcGQMw8xRJNPak1sQ7k4CQNge1KYM1EPCMCHcA6olbNmREIMjCuBEDqHQq8aL5XyvQbgKB9571UAAWTPAQXUMhoBBncD6SC6YExZhzHDOBhZIhSDAv8d8NDkR8DBv6fckBDzMFNI+RCWs0zODQF7AQO8zKILIUsTAqx1hbB2B4JyTVMi9BaHlAaEkXGVBqHUBomBPGtA6F0HoTRXGDDau1IGDAThMxsOsNQGg6wsEfIaduqNOaYjrLIERT4oYHi8GCZmZAjo1TgLwVKdgKLQxKskegeBcR+LqDpJI0VZjFRIsbAAgigNwWgal1MwBUVu7Z0DJAOnMYqfDyCeGCETFIkyyCeG4uoAQYyABUoBvwADYKjrU7n0VoyQtkVB2dIReBBkh3DuBUAA3EdL60AfoxSOqNVJORSkEHKQQSpUNkjbLNqNUaM9uhvLKRU6GvyXrtSGAMIAA"&gt;it type-safe&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Submissions
&lt;/h2&gt;

&lt;p&gt;Be sure to submit your solution by using the &lt;strong&gt;Share&lt;/strong&gt; button in the TypeScript playground.&lt;/p&gt;

&lt;p&gt;Then go to Twitter, and create a tweet about the challenge, add the link to your code and mention the TypeScript page (@typescript) &lt;/p&gt;

&lt;h2&gt;
  
  
  Need Extra Help?
&lt;/h2&gt;

&lt;p&gt;If you need additional help you can utilize the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;The TypeScript Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.com/invite/typescript"&gt;TypeScript Discord Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The comments on each Dev.to posts!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Typing :)&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Type | Treat Challenge 3

</title>
      <dc:creator>Gabrielle Crevecoeur</dc:creator>
      <pubDate>Wed, 28 Oct 2020 20:00:36 +0000</pubDate>
      <link>https://dev.to/typescript/type-treat-challenge-3-446j</link>
      <guid>https://dev.to/typescript/type-treat-challenge-3-446j</guid>
      <description>&lt;p&gt;Welcome to the third &lt;code&gt;Type | Treat&lt;/code&gt; challenge! Today we will be going over yesterday's answers and diving into some new problems to solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Yesterday's Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;typeof&lt;/code&gt; operator is one of those small tools which helps you avoid duplication, if you already have the type in the runtime - why not re-use it?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- type Pumpkin = any
&lt;/span&gt;&lt;span class="gi"&gt;+ type Pumpkin = typeof pumpkin
&lt;/span&gt;
- type PumpkinFromFunction = any
&lt;span class="gi"&gt;+ type PumpkinFromFunction = ReturnType&amp;lt;typeof Pumpkin&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;This one is a tricky one. Made a bit harder by an accident of not including every ghost in the &lt;code&gt;Ghosts&lt;/code&gt; type.&lt;/p&gt;

&lt;p&gt;The challenge aimed give a subtle nod to day 1's question, where the rest of the challenge becomes easier if you first make a set of types via conditionals or Extract.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Gods&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Extract&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;god&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Demons&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Extract&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;demon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;EctoPlasmics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Extract&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ectoplasmic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does actually work in the current challenge, even though it's not quite right. From there, you can create &lt;a href="https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards"&gt;user-defined type guards&lt;/a&gt; to change the code flow in the main algorithm to work as expected.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;areGods&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;Gods&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;god&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;areDemons&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;Demons&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;demon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;areEctoPlasmic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;EctoPlasmics&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ectoplasmic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That said, let's try work within the constraint of &lt;em&gt;'maybe the TypeScript team know what they are doing, and this challenge is meant to be this way?!'&lt;/em&gt; - which is kinda provably &lt;code&gt;false&lt;/code&gt; from this challenge.&lt;/p&gt;

&lt;p&gt;In the TypeScript structural type system, you don't really need to know much more than is required, and you could safely create a singular &lt;code&gt;type&lt;/code&gt; for &lt;code&gt;God&lt;/code&gt;, &lt;code&gt;Demon&lt;/code&gt; and &lt;code&gt;EctoPlasmics&lt;/code&gt;, then declare an array of those types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;God&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;god&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Demon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;demon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sendBackToHell&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;EctoPlasmic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ectoplasmic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;areGods&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;God&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;god&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;areEctoPlasmic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;EctoPlasmic&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ectoplasmic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;areDemons&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;Demon&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;demon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That type-safety is enough for the algorithm, but could bite you later on because &lt;code&gt;Ghosts &amp;amp; [x]&lt;/code&gt; makes any other property optional. &lt;br&gt;
If you are going for minimalism, here's a terse answer in 3 one-liners which takes into account usage inside the algorithm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;areDemons&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;Extract&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;demon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;demon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;areEctoPlasmic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;Extract&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ectoplasmic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ectoplasmic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;areGods&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Ghosts&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ghosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ghost&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;god&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;ghost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://twitter.com/igorbek/status/1321514610717904896"&gt;@igorbek managed to get it to two lines!&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;You've been keeping tally of how the houses on your street respond to trick-or-treaters. Can you reduce duplication from the types needed to describe the results?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcHIDcCmoBGjEDtQGt0AcBLDAc1AENQATAsgJwE9RIAzUemW0AF1oIGNsTTj0RkuAKBChaiAM7QANl1mhmkTu2idZIxFwA03ABaJGxTIlpkFCxs2sLQRLpFCSwXIzOR8xiYuoEcgBc3DJisoY8-NgqZBiUoBiQALSyRpAA7rIAdOLuoADC8WwwoAC2ZLjG3tz0eHKgmUb8RqC+WJRyfLxoTMwFnnLIMvJKsgD8+XyQGDphosqgALygANrioKAA3qAKkL5cBLOhAEQAEjCyyACMp4ajilxnImL3C2Khux2U9GcAMscsAAhOinUAAX0h+k2Oz2BzEQLOl2g11AAGZ3o8lC9wlx3q9nnCfn9QKcALJ0FSg2jgqEQmFbXb7Q5IskotEAFixcieuMWBLxX1QVUQlDOhUgkGwQVk7xJZwASuhrrA5ZDIeIALrTWbzaICFSrDZM+Gsk7sq7IABMPLGRNOBuwgpiZ0pxH4dMZcJZiItFytoAA7Ha+WSnS6BGcAMpaPC8a6UOna3VzLhJSDRjLZFbrWHMhFHf0c5AANlDOLJyTS2eTOoKADkssYxKVoKAjGQkMZkFx6nJDB02xVRT3ygVkunKNA8Ap+H5QLBfUWMLByAlF9iuGuUIxUURSAUKNAMEDVOpN7ylGv4okKBhEJknBguJZrnwV3UGlMgA"&gt;Help out here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;You have a list of trunk or treat spots, in your rush you hardcoded the result of your map function to convert it from an array to an object. &lt;br&gt;
Now the list is longer than three items, it's time to map that hardcoded result into a type. Can you refactor this TODO list function?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEBEEMDsHMBpQGEDyA1AkuAjATlABaQDOoATgKaQA21AnqAA4CuALqJKAEYCW0AJqAD20UKwIVQ0SK2aVhAMzFkeAYwDWwssqqs+sAHQAoEKACaQud2pCNhEsMasAtBUGshoPsVZVB-T05WMmZoTSFtYN0vaB8-YxMwDFFOEOICMU9GSkZIeQUIsQlQCgA3CmhWRDpLezJ+VSF+NyKKRPIKYmZqVlI+D1bQAHIAFRCwlDIx3QAlTu7eobE6RkkAdwI1DJ5SGkpIfjp2y3YhJX4ZSWcvViHSAFsd4n0OUAUKNaYyIVWyPU6AITtJAwUA1ZgdNYqXzDMahdSTaYyOZdHrEJYOUFCLgAKwoqnYrBWknEMnaPkgdD6omIdGgqlAax44kGPhUcGpw2C8MR+1YAGVGEJFgB+IxGRqxQnjBFTPmC4WkAC8oAA2kZQLDigAFPLqIaIDXDAASlmIkgAxNgDaAjUNTcxzaALQAmA12pARaAUbT8gg-d2aoba6iQVSSM6gADqEXSPEY7oAuhxSJKfOKjETVqA4RM5bN5mjQCqAN5GzUAIhGOr1FYAXKAy5rm82At6G1whEJqFRoPByy3Gf6G2z9P3B82bMKG3NGvUADyjuCIGB0AB8A4AvuPmxWHU6rRXQA2mxPQG2KB2uz2YDuJxshCPgmOBy2p6wZ-iIvxF8-lxxoHXLc71APczUtF160bV9WxES9uGvXsQJbB8n3ZBAYM1d9PznH8lwQACgJbTcjBIowFFCAkeBEUB7kgdQKBGFBwBQAAKYghV6BsswoSNuTzJEBU44gAEoG1zWVBJRBZSFPTVKFkMgaWEgxKH4Zhw1Y1jsjKRBVDkShKhE4s12gs8OkU0Q5PM0ADDsnTSmQs9VX0shDNYRMT0wmyLwbBQaHNJybNAbDG23bzzNQ0CKwi5sSPM+K4sQEtNxTHMZV5AtUV6ETSPFUwLAhVRQQcngPkGShstIUoeE4CsZlCI9IE7cpxTTQkmk8FU6IYpiWNY-jJPlYTcrTbsKAMGxYAGzrcvaGMyHUYhM061UqxrRaK0TAwL2LZRmDado-UsahBAW9QVoCNbPSUn1QGOxgtsmrt2FLMjTAAMUgHhqGWjwrrAx1LQAZie3aVX837DqOoUfp9ZwdgyH49BEGgxHjXZ5E4d5PmoPhOm4CgbE+cQdltDMKYp0wozyaB9AbBU4bIZb8rAbADBzTY+l2WjIEYVZ3GJUhsmxHt7kp9oXQ56sfUkMnOHashvsqYRRHESQ6P5loeI4MhYGYe4KlYCXTGBjnCtAYrREoZwgdeXI-kUQZfFUAg6YARwOt5vnuQYuAoWA+G9bRXZoHs4EkbBMlAWAKEJYoKAADzDdgGKpb2hHF0xm3V3WlboBsCFYVhGGIOsQGaUoDA8YAeOIVQVCcWviWcKIZGcUPaAqWPnBdZxgegbAADYgA"&gt;Refactor&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Share
&lt;/h2&gt;

&lt;p&gt;Be sure to submit your solution by using the &lt;strong&gt;Share&lt;/strong&gt; button in the TypeScript playground.&lt;/p&gt;

&lt;p&gt;Then go to Twitter, and create a tweet about the challenge, add the link to your code and mention the TypeScript page (@typescript) &lt;/p&gt;

&lt;h2&gt;
  
  
  Need Extra Help?
&lt;/h2&gt;

&lt;p&gt;If you need additional help you can utilize the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;The TypeScript Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.com/invite/typescript"&gt;TypeScript Discord Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The comments on each Dev.to posts!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Typing :)&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Type | Treat Challenge 2</title>
      <dc:creator>Gabrielle Crevecoeur</dc:creator>
      <pubDate>Tue, 27 Oct 2020 22:56:59 +0000</pubDate>
      <link>https://dev.to/typescript/type-treat-challenge-2-3n16</link>
      <guid>https://dev.to/typescript/type-treat-challenge-2-3n16</guid>
      <description>&lt;p&gt;Welcome to the second Type | Treat challenge! Today we will be deriving the types of pumpkins and busting ghosts!&lt;/p&gt;

&lt;h2&gt;
  
  
  Yesterday's Solution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;The solution for this challenge used &lt;a href="https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html"&gt;indexed types&lt;/a&gt; to extract a part of an existing type to avoid duplication. The need to use &lt;code&gt;[number]&lt;/code&gt; is an interesting twist, because &lt;code&gt;[0]&lt;/code&gt; or &lt;code&gt;[1]&lt;/code&gt; (or any number) would have worked just as well too. Doing this right would also have raised the typo in the original code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt; Your goal: remove this any, without changing GhostAPIResponse
&lt;span class="gd"&gt;- const displayHauntings = (haunting: any) =&amp;gt; {
&lt;/span&gt;&lt;span class="gi"&gt;+ const displayHauntings = (haunting: GhostAPIResponse["hauntings"][number]) =&amp;gt; {
&lt;/span&gt;  console.log(` - Title: ${haunting.title}`)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcHICcCmoC2BDA1gSwHYHNQ0dCAHE0AdwAssBjK0WyHHRWgFwGdR3JDQAJmnZoARmk6IAUCFCQAZqAA2kWmiWg8VSJy6EcAnlURZ4oeWgBuMeFnbIqaaDi4A6KTLBRohJIyTCuATsxoxKWIgulDT0jMysHNy8RsKCwmISiAA0nvqGAJ4woI6WyESgAIIACgCSoEicJMySmpGI8MKIhvKQZoU+Trzo7HTqSvnuuQDqxsT9oLpo8Ow88PlBPHwCWI1KaPlGDk4uQZxZoPMB4QBe0rIhqfMCzLArGDiQFMWfmzz5JMgQsgSEs0ChEPYzERDAAraC6UDw5AAAyI+WRk1kqJw6OKElAdm4JD2tGyoFE0BWaDiSiUiDQeGgyCQTBQ4IMXRSK3mahwuSRoFgNQ5AA9OQAVf6ITiwX5IFCQUqHQVo2UUOzaSmMRz4DZA3IAcW0umqNQAStKmjgWuwpZNbQDQEadOxTRbGs1kABeUAAbykoFAODBiAAXAt2LZ8AHyaYQgARToAfnDuijeBjAnpCeTqcjQRjoiwkDz6Y8gcczhG+E44Yq8A6+QAPL6eHY6aWgucSPBFZEiKTO-hzio1CNmEOCABfAB8UinHiY1pW212+2dCJ9AAotC7wxvXbV3VbJABKUBemd+mNLziQOmuFR4LfIgByIfDABJfbvdK5g+CU7IqeMZYIoO7GuwrhFssVCJvY563veiCPpAz7IgAQnGVBCPkX4-pB0HYfBiBASBgZgaAEEuq4WbCHBnSIc0yGoeh8YRAI+G-lBdE5vYZE3sxD5Pi+AA6OBYSWoDftxRGQAJgnWixInIuJ9bsBQvQYLWwExrJlYnDWrg9PAACiaD0FuSwaVpF5Xv6gaBquxL7AAEsc1Z4JwVnLJp8AYORoBTiBC65N4Zh4JA6jhvKfZGDs+j5Oc6ohDAKz0EQeAbAebqWp6Ui3iuOwufk7lVqcF5UQZnn7pBuUetaiAANoAETVacLUALpNTg0AoKI7Sdeel7XoGSHCWhL6gAAtKA4rtmG0m+u1+CuCM7B0gJY1CShKmOd+K14KhY7FjgW1xEpE3ofty0eUErg9n26A4KSAmhUAA"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt; You're first going to need to separate out the candy from the treats,
&lt;span class="err"&gt;//&lt;/span&gt; you can do that via conditional types.

- // type AllCandies = ...
&lt;span class="gi"&gt;+ type IsCandy&amp;lt;A&amp;gt; = A extends { candy: true } ? A : never;
+ type AllCandies = IsCandy&amp;lt;ResultsFromHalloween&amp;gt;
&lt;/span&gt;
- // type AllTricks = ...
&lt;span class="gi"&gt;+ type IsTrick&amp;lt;A&amp;gt; = A extends { trick: true } ? A : never;
+ type AllTricks = IsTrick&amp;lt;ResultsFromHalloween&amp;gt;
&lt;/span&gt;
// Almost there, but little 'Bobby Tables' cannot have peanuts. Can
&lt;span class="err"&gt;//&lt;/span&gt; you make a list of candies just for him?

- // type AllCandiesWithoutPeanuts = ...
&lt;span class="p"&gt;type HasPeanuts&amp;lt;A&amp;gt; = A extends { peanuts: true } ? A : never;
type AllCandiesWithoutPeanuts = HasPeanuts&amp;lt;AllCandies&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our original answer relied on using &lt;a href="https://www.typescriptlang.org/docs/handbook/2/conditional-types.html"&gt;Conditional Types&lt;/a&gt; to narrow the union, however we got a lot of responses using the &lt;a href="https://www.typescriptlang.org/docs/handbook/utility-types.html#excludetype-excludedunion"&gt;&lt;code&gt;Exclude&lt;/code&gt;&lt;/a&gt; utility type to make it a single liner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;AllCandies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Exclude&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ResultsFromHalloween&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;candy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which is a great solution. &lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcCdQNYEsAmBnUALAhgNwKaiz4AucAdvilpALaEDuSJmo2oDmkANoQEbYA5gCgQoAGbRu3UJHFZs0yA3z5yobpEgkANG3LUAnjADkBUCWwI1FzIRJJ6FyKFFhaVwuxT40AY1gkAAcHSHU5NmlZeRZ8WgAuYWESQyDCAGVybD8EACFsWAwAXlAAb1dQUCz6eNAAInSuWBJQAGEuPx5sEkJ8wrrhSuxaGHISWoAWQdA-bANDWpJYaHxhAF8klLTQAHFoWgFpYrKKquH8WrqdrXxDXf3D7jQBys7NWEvBYjU60AAfepBOBBXjPaazeaLZarDbJVKEACCQRBvlAJXK02qF3qSJRYNecxQCws0PWm3hbS0yFR6NOWMurSpSF8LxmhOJSxW0zSc2gJDQUK5sK2GXISBy+EKfTRJ0x50umXF1kKoD6rIhRMFq0qPPIfIFJKF5O2ABUtCwgtg0D0ZRjKvT6mbtJhLdb8KzaEgxhzSZUlkqtWS4dsAApqPxIGS0uU1eph8gR7is-05QOwsRQaAzYjdLygNBewS8UBBSOECKKGSxIi+KT8vSEjhzFokFzQNCrMQsJAYVv5nDEWR82yML1i8iCDDDMKCUDGOCIVBoAB0rhFoAASrXuPyAGKwOgACUrylU6hKmWyeQKGABewOldvoFxoP+oEVEqlBTfjMg1KfToWlaNoAvGiZJBmpiDuISCFC0giQIWzhVKo1B9h2lqwLmQ4tnYbLzBIB60COJL4N0aA6G4c4wPhoAoC4LDdKAuBIOwnQGMwSBhIoFjwiuwaItIrSEsyxwAKIAB5+Nw0A+AAPFuaB1mg+5HieKhqHopQaj6KxrAAfMahAAJJoCagQ5HJCL6TKCKgPgEk9AYGDlCmCBaqAaygAA-M+oC1JQBCwAA3AJz7SOZSo0qApmRZZinKaptDHkoGnkIZEFgAi3AjNaI7EHofDDtwzAkMWJi5JAfB8HcJrYHwoImPh5DaAo5i6vqq7CeQVHzqAHjWGwGg9i0EQaqJoAAFbti04iQPAmCON5YXHmgYa8vyVk2SUdkOU56AnB1-IeV5vl2QF+BBaF67Zdw3UoKJADqzBcHy616vyMqre9+pWUJIm+PpQA"&gt;Full link&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;Lets take a trip to the pumpkin patch and try to find the perfect one for our Jack O'Lantern. But in order to make sure we have located the right type of pumpkin, we need your help in identifying pumpkin types.&lt;/p&gt;

&lt;p&gt;We created some starter code you can find &lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFdQCwIYDcCmoGlQJwJ6gM4AOKAxgJYIA2oh0AtoQNZkB2ANOiwCag4ygB3BCwAuoEZFAksKBCLQYROYqABmWSHVBkRAOgBQ+kKAAqWBFx1lILKpTxFZzFgHMOfWCRiUeXFKtYFcWU0SCxtURQsVQQSFCMwVTDxODR8RGIOACNoMQ90GVAbe1AXSFYXcUlEVBSyfCKWNFoGZzYEgkl8rhsAcjFVFBRqSjJGNB1ehoEwkThQLmhCUZI5CpS0PwCWKxsDfS8WfDEWplZQAF5QAG99UClISjCALlAAIhxhp4F6uDf2+5KYivN5laBYLj-O4EMgALxQIIAsihLPQofcUE0sC4cCCAIwABgAnKAANIAKxoUVAhIJLnRam+URRrxilHwKABMPhAGFESCAKwE3QADlAAA9QAAWYUANgloAAzMKAExSOhQgC+AG5DMYAJJHeQWIqqKQyNaudDBFSjcbPBIdIFoAAK9DOLEuN1AHXuXieWFexywFV9oF0EY6msdxh5wl4-Hy0A5NpQkDNzoaEnNsnk1vwFUoaFGWIA-IZnaA3a1zldhDg9WAAHIocViJYcGQchBYEjzOCQAQJzzx5NBXJkUZKVNVeDCLhFp2pAgIOjNDRZItaH5za2qaAsEgiawsXSgAASg6k8fyrZE5iPGw6MhE4M9lfUmjqDX3h+PNlnFwUDEOY0lXNBnXLA4bGOHM5BQABRcVV2WFBqw9L0AAoAEpLgAPhuaEXzfGh3WcfRo30St0OcAAxDQ6Fog8jxPL1630IA"&gt;here&lt;/a&gt;, lets see if you can finish it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;Your job busting ghosts just got real tricky. Before you head in to &lt;em&gt;guard&lt;/em&gt; Manhattan, you need to assert to those ghosts who is boss. Help &lt;a href="https://www.typescriptlang.org/play?ssl=49&amp;amp;ssc=69&amp;amp;pln=49&amp;amp;pc=73#code/PTAEEkBcHIGdQEYFMkDtQEcCuBLSTQBDdJANzR1QHMAaUWAewFskHUCAbJSUBrHwhw4BYAFAhQkABYEqUhrEjwAnn2jlEKdAGNCkbVMpVQAMwYAnUKqyWTOc4qtJClyqDESEWWJSSxYAHSgACpSenCgqAw8ZGiSMqAA7haOCHjxfHJ0HmDpkDao8Hw8VAwAJvDEZaBlSExsleYEgoygTYLu4mBVRE2RDIlEQrzklgCyxGGQkMQBYjkhCQjmhJRFJlZ8lviETKBh8NrMBFgADkl4UkTogqXml0wLZpa1gkYX0vEEp+YMCFxMIKhJDKIj+JDmHjSHCVDh3B6dCQwr68VAcUGJQigtyJQwGTZYUC6dCvDgfK7SAgw2BYJBzUQLYGgsIaWDcUBnIigDgwngMDZNU4WfDVOQKJTAWr1QrAUoVBY9FnNWAAayQ1RwG2sROIphwwzcjBYvA2lJq3FWHFgCqhS2ikGYiH4-R4BmIVAIlPsRPKdPmXVAAGUZqC2ATLFQsC4yvSxJBlKcCAA1HClUAAXlAAG8xKBIrskAAuUAAIhTaaTYYAEswvOZjAARJD8WAGNBlCwmEs0XOICyoYslsYMDgd0iEEu9qRYJjEcCwKTFyDmWliAC+-vjidAAC0sFgyZmc6I86gC4O9wfu72pWwlyukL22agygAhQjaFXBBhVpBCAAUACUxakAwOBlOum4JsmlAAF4ZtmvZniwg4pqg8EAMIcMK8jXie5rSveq74c+b4fl+P5-hwQEgWBEGiBuDKiFuBAAOI4LBEIIcep7nqWaGYdhkK4T2+FykRj74YYABW5HBliAAKWAmCYEyoDRoCgeBkFMSxQY8iwliZoh+HIUWpaBgZEJ4XmRxCYOrFNGgAC0oJsp6Ui-Fgcg2aASDaA6pwcIQsBMDg2gSTpcbQaArHyIo8CZuWDCgAAPru+5kulAn+rU2jBX0JhYKgAU4GGC4MJ+ACCL7BCspz-mKCXFlV5grMoAA8WZ+QFDBBSFYURZID5rgAfMBml0f6wAAFQzaAAACtQ-P5ejqqAznxMiyIIIQ1R7aQ4UEDNwBiHlBUEEVJWQGVOi-P4wLBu0TCwBpWn0WIV2lWGlDkIoqZrQASkgQqQo18VKMWcXirAADaAC6gEmXmmqgP+LhIKx5SvU1SiAUjPF5qAEgAKqFDYVIbMiZr3HItrvA6NQML2eaeM66RHAe1TJOYKos0S92wI9y7OC9QH800+TmKgvaMb2Eh1eFKqgl4PBGtwhjUBAW2oCqSQEMSnSs2AYQvlwqJcrobLOQgyjOVbBC7T41r4aj6NNE20o4xDsD48jRPPGjRyFDwt7oPyoC477-tEwRbABKR76ft+v4AYB-OMXmcv4RIADqSDqAQHbsFtlTctE-SJKJxv0PIXOoNAPDIJIDApWUmp2NoB6QL2bsYwAor1CnBaF4XgzDfuE3mFXVbV9Xjwl6f4Yx2cSAA8gA0nQ0LwNTCTtiaPq1EkeJXMSjdEqbHpBAsGG6tqiT3PgpjFd9hSaNhgy4uFVyJPqZJcFtM0BADANALCOMfI4TBTj6iQAAfggDAeA2EGAqneCtaYbkIRlW8LwZ0lImg3yYhILG5RuRYE-EEeSoZ0DWAjFGcwMYgA"&gt;finalize the ghost-busting algorithm&lt;/a&gt; because who else are you gonna call?&lt;/p&gt;

&lt;h2&gt;
  
  
  Sharing
&lt;/h2&gt;

&lt;p&gt;Be sure to submit your solution by using the &lt;strong&gt;Share&lt;/strong&gt; button in the TypeScript playground.&lt;/p&gt;

&lt;p&gt;Then go to Twitter, and create a tweet about the challenge, add the link to your code and mention the TypeScript page (@typescript) &lt;/p&gt;

&lt;h2&gt;
  
  
  Need Extra Help?
&lt;/h2&gt;

&lt;p&gt;If you need additional help you can utilize the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;The TypeScript Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.com/invite/typescript"&gt;TypeScript Discord Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The comments on each Dev.to posts!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Typing :)&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Type | Treat Challenge 1</title>
      <dc:creator>Gabrielle Crevecoeur</dc:creator>
      <pubDate>Mon, 26 Oct 2020 18:09:01 +0000</pubDate>
      <link>https://dev.to/typescript/type-treat-challenge-1-829</link>
      <guid>https://dev.to/typescript/type-treat-challenge-1-829</guid>
      <description>&lt;p&gt;Welcome to the first Type | Treat challenge! Today we will be extracting haunting data from ghosts and sorting Halloween candy!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Beginner/Learner Challenge
&lt;/h3&gt;

&lt;p&gt;So the TypeScript team is being hired to investigate recent hauntings in the community, and we are trying to figure which ghost is the trouble-maker!&lt;/p&gt;

&lt;p&gt;We found an API that will allow us to get data on the ghosts however, out code isn't fully optimized. So we need your help.&lt;/p&gt;

&lt;p&gt;Head to &lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcHICcCmoC2BDA1gSwHYHNQ0dCAHE0AdwAssBjK0WyHHRWgFwGdR3JDQAJmnZoARmk6IAUCFCQAZqAA2kWmiWg8VSJy6EcAnlURZ4oeWgBuMeFnbIqaaDi4A6KTLBRohJIyTCuATsxoxKWIgulDT0jMysHNy8RsKCwmISiAA0nvqGAJ4woI6WyESgAIIACgCSoEicJMySmpGI8MKIhvKQZoU+Trzo7HTqSvnuuQDqxsT9oLpo8Ow88PlBPHwCWI1KaPlGDk4uQZxZoPMB4QBe0rIhqfMCzLArGDiQFMWfmzz5JMgQsgSEs0ChEPYzERDAAraC6UDw5AAAyI+WRk1kqJw6OKElAdm4JD2tGyoFE0BWaDiSiUiDQeGgyCQTBQ4IMXRSK3mahwuSRoFgNQ5AA9OQAVf6ITiwX5IFCQUqHQVo2UUOzaSmMRz4DZA3IAcW0umqNQAStKmjgWuwpZNbQDQEadOxTRbGs1kABeUAAbykoFAODBiAAXAt2LZ8AHyaYQgARToAfnDuijeBjAnpCeTqcjQRjoiwkDz6Y8gcczhG+E44Yq8A6+QAPL6eHY6aWgucSPBFZEiKTO-hzio1CNmEOCABfAB8UinHiY1pW212+2dCJ9AAotC7wxvXbV3VbJABKUBemd+mNLziQOmuFR4LfIgByIfDABJfbvdK5g+CU7IqeMZYIoO7GuwrhFssVCJvY563veiCPpAz7IgAQnGVBCPkX4-pB0HYfBiBASBgZgaAEEuq4WbCHBnSIc0yGoeh8YRAI+G-lBdE5vYZE3sxD5Pi+AA6OBYSWoDftxRGQAJgnWixInIuJ9bsBQvQYLWwExrJlYnDWrg9PAACiaD0FuSwaVpF5Xv6gaBquxL7AAEsc1Z4JwVnLJp8AYORoBTiBC65N4Zh4JA6jhvKfZGDs+j5Oc6ohDAKz0EQeAbAebqWp6Ui3iuOwufk7lVqcF5UQZnnhmi56XtegZIcJaEvqAAC0oDiu2YbSb61VBK4IzsHSAlNUJKEqY534DfgqFjsWOBjXESkteh039R5g09n26A4KSAmhUAA"&gt;this link&lt;/a&gt; and help us figure out the best type to use in one of our function parameters!&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermediate/Advanced Challenge
&lt;/h3&gt;

&lt;p&gt;Your kids have come back from trick or treating with a lot of loot. Someone's going to have to sort this pile, and it looks like that job has fallen to you. Can you conditionally filter the pile into manageable lists?&lt;/p&gt;

&lt;p&gt;Head over &lt;a href="https://www.typescriptlang.org/play?#code/PTAEE0HsFcCdQNYEsAmBnUALAhgNwKaiz4AucAdvilpALaEDuSJmo2oDmkANoQEbYA5gCgQoAGbRu3UJHFZs0yA3z5yobpEgkANG3LUAnjADkBUCWwI1FzIRJJ6FyKFFhaVwuxT40AY1gkAAcHSHU5NmlZeRZ8WgAuYWESQyDCAGVybD8EACFsWAwAXlAAb1dQUCz6eNAAInSuWBJQAGEuPx5sEkJ8wrrhSuxaGHISWoAWQdA-bANDWpJYaHxhAF8klLTQAHFoWgFpYrKKquH8WrqdrXxDXf3D7jQBys7NWEvBYjU60AAfepBOBBXjPaazeaLZarDbJVKEACCQRBvlAJXK02qF3qSJRYNecxQCws0PWm3hbS0yFR6NOWMurSpSF8LxmhOJSxW0zSc2gJDQUK5sK2GXISBy+EKfTRJ0x50umXF1kKoD6rIhRMFq0qPPIfIFJKF5O2ABUtCwgtg0D0ZRjKvT6mbtJhLdb8KzaEgxhzSZUlkqtWS4dsAApqPxIGS0uU1eph8gR7is-05QOwsRQaAzYjdLygNBewS8UBBSOECKKGSxIi+KT8vSEjhzFokFzQNCrMQsJAYVv5nDEWR82yML1i8iCDDDMKCUDGOCIVBoAB0rmDhAASrXuPyAGKwOgACUrylU6hKmWyeQKGABewOldvoFxoP+oEVEqlBTfjMg1KfToWlaNoAvGiZJBmpiDuISCFC0giQIWzhVKo1B9h2lqwLmQ4tnYbLzBIB60COJL4N0aA6G4c4wPhoAoC4LDdKAuBIOwnQGMwSBhIoFjwiuEFgCKz7SK0hLMscy6SVRQkItIJqBDkElSVRskjNaI7EHofDDtwzAkMWJi5JAfB8HcJrYHwoImPh5DaAo5i6vqq6ieQVHzqAHjWGwGg9i0EQauJoAAFbti04iQPAmCOAA-AJvHbLJ3AuSg4kAOrMFwfJhry-IypJy7CEAA"&gt;to start sorting&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share Your Code
&lt;/h2&gt;

&lt;p&gt;Be sure to submit your solution by using the &lt;strong&gt;Share&lt;/strong&gt; button in the TypeScript playground to copy the link to your clipboard.&lt;/p&gt;

&lt;p&gt;Next go to Twitter, and create a tweet about the challenge, add the paste the link to your code and mention the TypeScript page (@typescript) !&lt;/p&gt;

&lt;h2&gt;
  
  
  Need Extra Help?
&lt;/h2&gt;

&lt;p&gt;If you need additional help you can utilize the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;The TypeScript Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.com/invite/typescript"&gt;TypeScript Discord Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The comments on each Dev.to posts!&lt;/li&gt;
&lt;li&gt;Beginners may want to check out this &lt;a href="https://www.typescriptlang.org/docs/handbook/advanced-types.html#index-types"&gt;page from the TypeScript Handbook&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Typing :)&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>challenge</category>
    </item>
    <item>
      <title>The TypeScript Team Presents `Type | Treat`

</title>
      <dc:creator>Gabrielle Crevecoeur</dc:creator>
      <pubDate>Sun, 25 Oct 2020 20:59:26 +0000</pubDate>
      <link>https://dev.to/typescript/the-typescript-team-presents-type-treat-1c35</link>
      <guid>https://dev.to/typescript/the-typescript-team-presents-type-treat-1c35</guid>
      <description>&lt;p&gt;Tomorrow October 26th, you will be able to participate in TypeScript's first ever set of virtual code challenges: &lt;code&gt;Type | Treat&lt;/code&gt; (or "Type or Treat")! We will be presenting some "spooky" code challenges that will allow you to get deeper into the TypeScript language but in a fun way. &lt;/p&gt;

&lt;p&gt;Starting tomorrow, a new code challenge will be posted every weekday, along with its solution the day after. The last solution will be posted on Halloween day. &lt;/p&gt;

&lt;p&gt;You can look forward to the challenges being posted at 4 PM EST. All information will be posted right here on our Dev.to channel, so be sure to follow!&lt;/p&gt;

&lt;h2&gt;
  
  
  Are The Challenges For TypeScript Developers Only?
&lt;/h2&gt;

&lt;p&gt;Absolutely not! We want all developers, familiar with TypeScript or not to be apart of &lt;code&gt;Type | Treat&lt;/code&gt;. Every day will have two different types of challenges, one for beginners/learners and one for intermediate/advanced developers. That way everyone can participate.&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Participate
&lt;/h2&gt;

&lt;p&gt;In order to participate you will need to have a twitter account and be sure that you can access this channel, along with the &lt;a href="https://www.typescriptlang.org/"&gt;TypeScript website&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;As mentioned earlier, you will want to start here to find the details on the code challenge of the day. Each challenge will contain a link to the starter code, that will be held in the TypeScript playground. Via the playground you can work on the challenge in the browser and you will be able to test your code to see if it properly passes the challenge&lt;/p&gt;

&lt;h3&gt;
  
  
  How To Share Your Solution
&lt;/h3&gt;

&lt;p&gt;Once you feel you have completed the challenge, you will need to select the &lt;strong&gt;Share&lt;/strong&gt; button in the playground. This will automatically copy a playground URL to your clipboard.&lt;/p&gt;

&lt;p&gt;You will then need to go to Twitter, and create a tweet about the challenge, add the link to your code and mention the &lt;a href="//twitter.com/typescript"&gt;@TypeScript&lt;/a&gt; Twitter account with the hashtag &lt;a href="https://twitter.com/search?q=%23TypeOrTreat"&gt;#TypeOrTreat&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Resources for Additional Help
&lt;/h3&gt;

&lt;p&gt;If you need additional help you can utilize the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;The TypeScript Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.com/invite/typescript"&gt;TypeScript Discord Room&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The comments on each Dev.to post!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>typescript</category>
      <category>codenewbie</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
