<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[All Things Typescript: Monthly Newsletter]]></title><description><![CDATA[Hand-curated Typescript and web dev articles, courses, videos and podcast episodes from other writers to help you up your Typescript game.]]></description><link>https://www.allthingstypescript.dev/s/monthly-newsletter</link><image><url>https://substackcdn.com/image/fetch/$s_!5AXN!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png</url><title>All Things Typescript: Monthly Newsletter</title><link>https://www.allthingstypescript.dev/s/monthly-newsletter</link></image><generator>Substack</generator><lastBuildDate>Sat, 09 May 2026 04:45:35 GMT</lastBuildDate><atom:link href="https://www.allthingstypescript.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Maina Wycliffe]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[allthingstypescript@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[allthingstypescript@substack.com]]></itunes:email><itunes:name><![CDATA[Maina Wycliffe]]></itunes:name></itunes:owner><itunes:author><![CDATA[Maina Wycliffe]]></itunes:author><googleplay:owner><![CDATA[allthingstypescript@substack.com]]></googleplay:owner><googleplay:email><![CDATA[allthingstypescript@substack.com]]></googleplay:email><googleplay:author><![CDATA[Maina Wycliffe]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[June 2024 Monthly Newsletter -TypeScript 5.5 released with a huge upgrade]]></title><description><![CDATA[In this issue, I look at content from myself and other authors for the month of June, and also take a brief look at Typescript 5.5 notable features that were released last month]]></description><link>https://www.allthingstypescript.dev/p/june-2024-monthly-newsletter-typescript</link><guid isPermaLink="false">https://www.allthingstypescript.dev/p/june-2024-monthly-newsletter-typescript</guid><dc:creator><![CDATA[Maina Wycliffe]]></dc:creator><pubDate>Mon, 08 Jul 2024 04:27:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e6340281-aa8d-4eb4-9267-edb1ab2de57e_3840x2160.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, Everyone. Another month has passed, and today is the day I look back on informative content I came across last month and news related to Typescript.</p><p>My name is Maina Wycliffe, and I love teaching Typescript to developers. My goal is to break down complex topics into small, understandable bits that you can apply in your day-to-day life as a developer.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>React Advanced London 2024</h2><p>I want to announce a special collaboration with <a href="https://gitnation.org/">GitNation</a>, the organizers of events such as JSNation and React Summit in Amsterdam and New York, React Day Berlin, and React Advanced in London.</p><p>React Advanced London 2024 is coming up later in the year (October), and as subscribers for All Things Typescript, you will get <strong>10%</strong> off for tickets using the code <strong><a href="https://ti.to/gitnation/react-advanced-london-2024/discount/AllThingsTypescript10">AllThingsTypescript10</a> </strong>for the conference.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FKWw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FKWw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!FKWw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!FKWw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!FKWw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FKWw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2356032,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!FKWw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!FKWw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!FKWw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!FKWw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a08712-96dc-40c0-b196-515a4e20cfa4_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In this conference, you learn more about React 19, Performance, Server Components, Senior-Driven Tech Mindset &amp; more! On top of that, you will get to network and reconnect with some of the top minds in the industry and engage in board games and, if you want to, parties and karaoke.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://ti.to/gitnation/react-advanced-london-2024/discount/AllThingsTypescript10&quot;,&quot;text&quot;:&quot;Get your ticket today&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://ti.to/gitnation/react-advanced-london-2024/discount/AllThingsTypescript10"><span>Get your ticket today</span></a></p><div><hr></div><h2>Typescript 5.5 Released</h2><p>The latest version of Typescript (version 5.5) was released in June and has a very exciting update that all Typescript developers are excited about. Typescript has improved Type inference and now can narrow Types based on control flow within arrays when you use the array filter method, which wasn&#8217;t possible before. </p><p>Before Typescript 5.5., if you filtered an array to, let&#8217;s say, remove undefined values inside an array, Typescript wasn&#8217;t able to infer that the type needed to be narrowed as the undefined values have been removed. This has changed, as demonstrated in the video clip I created below when the beta version was released.</p><div id="youtube2-ugeQfRdzLRk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ugeQfRdzLRk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ugeQfRdzLRk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Other notable features include:</p><ul><li><p>Control flow narrowing for Constant Indexed Accesses</p></li><li><p>Import types into JS Docs (JS Files)</p></li><li><p>Type-checking in regular expressions</p></li><li><p><a href="https://github.com/tc39/proposal-set-methods">ESM Set new methods</a> such as <code>union</code> and <code>intersection</code> are now supported.</p></li></ul><p>And there is more, which you can learn by reading the announcement blog <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-5/">here</a>.</p><p>Next week, I will take a deep dive into some of the exciting features of Typescript 5.5.</p><div><hr></div><h2>From All Things Typescript</h2><p>I want to apologize for not publishing as regularly as in previous months, but I will resume publishing regularly in June, starting next week when I take a deep dive into Typescript 5.5.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;365c9550-3ed5-4995-bfa4-9473d23a95ac&quot;,&quot;caption&quot;:&quot;Over a decade ago, NodeJS was born, and not long after, Node Package Manager (NPM) was born, and the two have become synonymous with each other. Even most Javascript third-party package registries - different from package managers - yarn, bun, etc. - that have come after that, such as&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;JavaScript Registry (JSR): A Better Alternative to NPM &#129335;&#127998;?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-06-17T07:24:58.801Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc0848bf-4833-4066-bf74-5998438c1173_3840x2160.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/a-brief-introduction-to-javascript&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144104812,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><p>I want to give a shout-out to CSS Isn&#8217;t Magic by Stas Melnikov. Most of us struggle with understanding CSS concepts, and If you want to change that and take your CSS game to the next level, please subscribe to the newsletter.</p><div class="embedded-publication-wrap" data-attrs="{&quot;id&quot;:610708,&quot;name&quot;:&quot;CSS isn't magic&quot;,&quot;logo_url&quot;:null,&quot;base_url&quot;:&quot;https://cssisntmagic.substack.com&quot;,&quot;hero_text&quot;:&quot;the tips that help to break the stereotype CSS is magic&quot;,&quot;author_name&quot;:&quot;Stas Melnikov&quot;,&quot;show_subscribe&quot;:true,&quot;logo_bg_color&quot;:&quot;#ffffff&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPublicationToDOMWithSubscribe"><div class="embedded-publication show-subscribe"><a class="embedded-publication-link-part" native="true" href="https://cssisntmagic.substack.com?utm_source=substack&amp;utm_campaign=publication_embed&amp;utm_medium=web"><span class="embedded-publication-name">CSS isn't magic</span><div class="embedded-publication-hero-text">the tips that help to break the stereotype CSS is magic</div><div class="embedded-publication-author-name">By Stas Melnikov</div></a><form class="embedded-publication-subscribe" method="GET" action="https://cssisntmagic.substack.com/subscribe?"><input type="hidden" name="source" value="publication-embed"><input type="hidden" name="autoSubmit" value="true"><input type="email" class="email-input" name="email" placeholder="Type your email..."><input type="submit" class="button primary" value="Subscribe"></form></div></div><h2>From Other Authors</h2><h4><a href="https://itnext.io/how-to-write-api-response-types-with-typescript-f8152ddd43dd">How To Write API Response Types with TypeScript by Artem Holinka</a></h4><p>Organize TypeScript types for API responses to ensure a great development experience, code maintenance, and avoidance of obvious coding errors.</p><p><a href="https://itnext.io/how-to-write-api-response-types-with-typescript-f8152ddd43dd">Link</a></p><h4><a href="https://dev.to/mattlewandowski93/7-use-cases-for-javascript-proxies-3b29">7 Use Cases for Javascript Proxies by Matt Lewandowski</a></h4><p>JavaScript's Proxy object is a useful tool that opens up a world of possibilities, allowing you to create some really useful behaviors in your applications. When combined with TypeScript, Proxy enhances your ability to manage and manipulate objects and functions in ways you might not have thought possible. In this article, we'll explore the incredible utility of Proxies through practical examples.</p><p><a href="https://dev.to/mattlewandowski93/7-use-cases-for-javascript-proxies-3b29">Link</a></p><h4><a href="https://storybook.js.org/blog/visual-testing-is-the-greatest-trick-in-ui-development/">Visual testing: The greatest trick in UI development by Michael Shilman</a></h4><p>In UI development, making sure everything looks right is as important as making sure it works. Visual tests are image snapshot tests that solve for this.</p><p>However, somewhat surprisingly, they can also replace the most brittle part of many UI unit tests: asserting on details of the UI. In many cases this can replace the unit test entirely, allowing you to test more with far less code.</p><p><a href="https://storybook.js.org/blog/visual-testing-is-the-greatest-trick-in-ui-development/">Link</a></p><h4><a href="https://deno.com/blog/deno-bites-ts-intro">A Gentle Intro to TypeScript by Jo Franchetti</a></h4><p>This article is an excellent article for developers who are just getting started with Typescript and wondering why Typescript exists and the fundamentals of Typescript.</p><p><a href="https://deno.com/blog/deno-bites-ts-intro">Link</a></p><h4><a href="https://dev.to/alexmercedcoder/introduction-to-sorting-algorithms-in-javascript-b60">Introduction to Sorting Algorithms in JavaScript by Alex Merced</a></h4><p>Sorting algorithms are fundamental to computer science and programming. They are essential tools for organizing data in a meaningful order, whether it&#8217;s numerical, alphabetical, or based on any other criteria. For JavaScript developers, understanding these algorithms is crucial, as they often need to manipulate and sort data efficiently within their applications. This blog aims to provide an introduction to some of the most common sorting algorithms implemented in JavaScript, highlighting their mechanics and when to use them.</p><p><a href="https://dev.to/alexmercedcoder/introduction-to-sorting-algorithms-in-javascript-b60">Link</a></p><h4><a href="https://johnnyreilly.com/dual-publishing-esm-cjs-modules-with-tsup-and-are-the-types-wrong">Dual Publishing ESM and CJS Modules with tsup and Are the Types Wrong? by John Reilly</a></h4><p>If you need to publish a package that supports both ECMAScript modules (ESM) and CommonJS modules (CJS), you can use <code>tsup</code> to do so. This post will show you how to do that and how to ensure that the types are correct using the tool <code>Are the Types Wrong?</code>.</p><p><a href="https://johnnyreilly.com/dual-publishing-esm-cjs-modules-with-tsup-and-are-the-types-wrong">Link</a></p><h4><a href="https://dev.to/jps27cse/understanding-javascript-object-accessors-3i25">Understanding JavaScript Object Accessors by Jack Pritom Soren</a></h4><p>JavaScript is a versatile and powerful programming language used extensively in web development. One of its key features is the ability to define objects, which can encapsulate properties and methods. Among the various ways to interact with these objects, accessors play a crucial role. This blog post will delve into the concept of JavaScript object accessors, explaining what they are, how they work, and why they are beneficial.</p><p><a href="https://dev.to/jps27cse/understanding-javascript-object-accessors-3i25">Link</a></p><h4><a href="https://dev.to/wasp/ive-been-writing-typescript-without-understanding-it-5ef4">I've been writing TypeScript without understanding it by vincanger</a></h4><p>The other day, I was stuck with a bug in some code that was handling optimistic updates, so I asked my colleague Filip for some help. Filip, a TypeScript wizard, mentioned that the satisfies keyword would be part of the solution I was looking for.</p><p>Satisfies? What the heck is that? And why had I never heard of it before? I mean, I&#8217;ve been using TypeScript for some time now, so I was surprised I didn&#8217;t know it myself.</p><p><a href="https://dev.to/wasp/ive-been-writing-typescript-without-understanding-it-5ef4">Link</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>That's it for this issue. Thank you for getting this far. If you enjoyed this article and would like to support my work, please share and like this issue and consider sharing All Things Typescript with friends and colleagues.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share All Things Typescript&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share All Things Typescript</span></a></p><p>Did you know you can hire me to coach your team and help them improve their Typescript skills? If this interests you, please get in touch with me to discuss it.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43214086,&quot;userName&quot;:&quot;Maina Wycliffe&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p>And until next time, please keep on learning.</p>]]></content:encoded></item><item><title><![CDATA[May 2024 Monthly Newsletter - using the in operator for type narrowing]]></title><description><![CDATA[In this issue, I look at content from myself and other authors for the month of May and I also add in Typescript type, on how you can use the in operator for type narrowing over type assertions.]]></description><link>https://www.allthingstypescript.dev/p/may-2024-monthly-newsletter-using</link><guid isPermaLink="false">https://www.allthingstypescript.dev/p/may-2024-monthly-newsletter-using</guid><dc:creator><![CDATA[Maina Wycliffe]]></dc:creator><pubDate>Mon, 03 Jun 2024 04:56:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GE_5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, Everyone. Another month has passed, and today is the day I look back on informative content I came across last month and news related to Typescript.</p><p>My name is Maina Wycliffe, and I love teaching Typescript to developers. My goal is to break down complex topics into small, understandable bits that you can apply in your day-to-day life as a developer.</p><p>If you want to learn Typescript, please subscribe to this newsletter.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><p>Now that that self-plug is out of the way (subtle) let&#8217;s get to today&#8217;s issue.</p><div><hr></div><h3>Typescript Tip &#128161;</h3><p>This month was thin on official Typescript news, so instead of that, I will leave you with a Typescript tip instead.</p><p>Many developers habitually reach out for <a href="https://www.allthingstypescript.dev/p/avoid-using-type-assertions-in-typescript">type assertions</a> when checking whether an object with a union of types has specific fields. The <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in">in-operator</a> is perfect for this, as shown below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GE_5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GE_5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 424w, https://substackcdn.com/image/fetch/$s_!GE_5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 848w, https://substackcdn.com/image/fetch/$s_!GE_5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 1272w, https://substackcdn.com/image/fetch/$s_!GE_5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GE_5!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png" width="1200" height="1191.7582417582419" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:1446,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:17675441,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GE_5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 424w, https://substackcdn.com/image/fetch/$s_!GE_5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 848w, https://substackcdn.com/image/fetch/$s_!GE_5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 1272w, https://substackcdn.com/image/fetch/$s_!GE_5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe62ae2-d6d1-45b1-8aec-4a47c745a8ac_10704x10632.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>From All Things Typescript</h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;09505ab7-83e9-4da9-be27-e3dcfd763500&quot;,&quot;caption&quot;:&quot;For a while now, I have meant to write about this issue to collect and convey my thoughts on Schema First Type design in Typescript. I will be giving this talk for the This is Learning virtual conference, and I thought it would be amazing to have an issue accompanying the talk&#8212;killing two birds with one stone.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Schema First Type Design in Typescript&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-20T05:51:47.628Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b9aec0f-0f62-4147-a27f-59163af9e84d_3840x2160.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/schema-first-type-design-in-typescript&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144358637,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;30439898-9413-4956-b0ad-0c11224fc828&quot;,&quot;caption&quot;:&quot;Typescript usually has two schools of thought&#8212;enums and unions&#8212;with strong supporters on both sides of the argument. In today's issue, I want to avoid that debate and focus solely on Enums, specifically a different, lesser-known version of enums: const enums.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Why do we have const enums in Typescript?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-27T07:04:53.517Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dabc46f3-9002-4ca7-894a-2b56708f05e5_3840x2160.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/why-do-we-have-const-enums-in-typescript&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:135813058,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><p><strong>If you like my content and want to support my work, please consider supporting me (</strong><em><strong>you can buy me a double latte, the juice that powers my creativity and determination &#9749;&#65039;</strong></em><strong>) through <a href="https://github.com/sponsors/mainawycliffe/">Github Sponsors</a>.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/sponsors/mainawycliffe/&quot;,&quot;text&quot;:&quot;&#9749;&#65039; Consider buying me a cup of coffee&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://github.com/sponsors/mainawycliffe/"><span>&#9749;&#65039; Consider buying me a cup of coffee</span></a></p><div><hr></div><h3>Book Recommendation</h3><h4>Learning Typescript by Josh Goldberg</h4><p>This is an amazing book, especially if you are starting Typescript. It&#8217;s well laid out, and the concepts are broken down into small, easy-to-understand concepts that are easy to follow and grasp different concepts in Typescript.</p><p>You can learn more about the book <a href="https://www.learningtypescript.com/">here</a>.</p><div><hr></div><h3>From Other Authors</h3><h4><a href="https://blog.appsignal.com/2024/05/08/effective-testing-in-javascript.html">Effective Testing in JavaScript by Ashley Davis</a></h4><p>This article emphasizes the importance of testing, advocating for a proactive approach where testing is frequent and early, ensuring code remains functional. The author shares personal insights and techniques to make testing less laborious while still effective, ultimately underscoring the goal of delivering reliable code that meets customer needs.</p><p><a href="https://blog.appsignal.com/2024/05/08/effective-testing-in-javascript.html">Link</a></p><h4><a href="https://thenewstack.io/automatically-generate-types-for-your-postgresql-database/">Automatically Generate Types for Your PostgreSQL Database by Paul Scanlon</a></h4><p>SQL can be typesafe, in the JavaScript sense of the word. Paul Scanlon demonstrates why devs shouldn't be afraid to work with "raw SQL."</p><p><a href="https://thenewstack.io/automatically-generate-types-for-your-postgresql-database/">Link</a></p><h4><a href="https://blog.ohansemmanuel.com/the-typescript-feature-we-all-wanted/">The Typescript feature we all wanted by Ohans Emmanuel</a></h4><p>Inferred Type Predicates are now available in Typescript 5.5 Beta. In this article, I&#8217;ll explain the much-awaited feature and how it&#8217;ll help you write more type-safe code.</p><p><a href="https://blog.ohansemmanuel.com/the-typescript-feature-we-all-wanted/">Link</a></p><h4><a href="https://www.freecodecamp.org/news/a-guide-to-the-node-js-event-loop/">A Guide to the Node.js Event Loop by Musab Habeeb</a></h4><p>The Node.js event loop is a crucial mechanism in Node.js that makes Node.js programs run concurrently and asynchronously. Mastering the Node.js event loop helps a Node.js developer understand how Node.js programs run under the hood.</p><p>In this article, you will learn the basics of the event loop, starting with threads and processes, then how the JavaScript event loop works, and finally, how the Node.js event loop works.</p><p><a href="https://www.freecodecamp.org/news/a-guide-to-the-node-js-event-loop/">Link</a></p><h4><a href="https://deno.com/blog/document-javascript-package">How to document your JavaScript package Andy Jiang, Luca Casonato, Jo Franchetti, and Leo Kettmeir</a></h4><p>This article emphasizes the importance of writing clear, concise JSDocs. It outlines best practices for creating JSDocs, including providing good type information, using tags to add detail, and including examples to demonstrate usage. It also discusses the significance of keeping documentation up-to-date with code changes and auditing JSDoc comments to ensure quality. The goal is to help users quickly understand how to use a package with minimal effort, enhancing the package's success within the community.</p><p><a href="https://deno.com/blog/document-javascript-package">Link</a></p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>That's it for this issue. Thank you for getting this far. If you enjoyed this article and would like to support my work, please share and like this issue and consider sharing All Things Typescript with friends and colleagues.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share All Things Typescript&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share All Things Typescript</span></a></p><p>Did you know you can hire me to coach your team and help them improve their Typescript skills? If this interests you, please get in touch with me to discuss it.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43214086,&quot;userName&quot;:&quot;Maina Wycliffe&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p>And until next time, please keep on learning.</p>]]></content:encoded></item><item><title><![CDATA[April 2024 Monthly Newsletter - TypeScript 5.5 Beta with a huge feature]]></title><description><![CDATA[In April we saw the release of Typescript 5.5, and on top of that, the Deno team announced a JavaScript Registry (JSR) that's optimized for Typescript and JavaScript]]></description><link>https://www.allthingstypescript.dev/p/april-2024-monthly-newsletter-typescript</link><guid isPermaLink="false">https://www.allthingstypescript.dev/p/april-2024-monthly-newsletter-typescript</guid><dc:creator><![CDATA[Maina Wycliffe]]></dc:creator><pubDate>Mon, 06 May 2024 06:17:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/ugeQfRdzLRk" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, Everyone. Another month has passed, and today is the day I look back on informative content I came across last month and news related to Typescript.</p><p>My name is Maina Wycliffe, and I love teaching Typescript to developers. My goal is to break down complex topics into small, understandable bits that you can apply in your day-to-day life as a developer.</p><h2>My First Typescript Workshop</h2><p>I am excited to announce that I am working on a series of virtual Typescript workshops. The first will be in a couple of months&#8212;either later in July or early August.</p><p>The first workshop I will be doing is about a topic I am very passionate about - Schema first-type design in Typescript (I will be doing a talk in relationship to this next week for the <a href="https://til-conf.netlify.app/">This is Learning virtual conference</a> (please join). </p><p>I aim to teach how to use tools such as <a href="https://www.allthingstypescript.dev/p/using-zod-schemas-as-source-of-truth?utm_source=publication-search">Zod</a> and <a href="https://www.allthingstypescript.dev/p/schema-first-typescript-types-design">Valibot</a> to design schemas from which you can infer Typescript static. This will create a single source of truth together with static types.</p><p>Let me know if you are interested in joining my first workshop by answering the survey below:</p><div class="poll-embed" data-attrs="{&quot;id&quot;:172160}" data-component-name="PollToDOM"></div><p>I will send out a notification with details on the workshop and instructions on how to sign up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><h2>Typescript 5.5 Beta Released</h2><p>The beta version of Typescript 5.5 was released last month, and I will review the features that I found rather interesting and exciting. </p><p>Some of the exciting improvements revolve around better type inference. For instance, one that I find personally exciting is control flow type narrowing when arrays are involved. </p><p>Currently, if you filter an array to, let&#8217;s say, remove undefined values inside an array, Typescript isn&#8217;t able to infer that the type needs to be narrowed.</p><p>This changes in the next version of Typescript, which can now narrow based on the control flow inside the filter method, as shown below.</p><div id="youtube2-ugeQfRdzLRk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ugeQfRdzLRk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ugeQfRdzLRk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>This is exciting, isn&#8217;t it? Let me know if you want me to explore this further in a future issue of All Things Typescript.</p><p>Other notable features include:</p><ul><li><p>Import types into JS Docs (JS Files)</p></li><li><p>Type-checking in regular expressions</p></li></ul><p>And there is more, which you can learn by reading the announcement blog <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-5-beta/">here</a>.</p><h2>From All Things Typescript</h2><p>This month, I wrapped up the series around Generics and explored Typescript&#8217;s relationship with Javascript.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;7bed9245-19ab-4164-a5ac-c559879dd6c0&quot;,&quot;caption&quot;:&quot;In the last two issues, we started exploring generics, where we looked at the fundamentals of generics and how to create generics constraints. I believe this has given you a good foundation for working with generics in Typescript. You can find the last two issues below:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Making Generics Types Optional - Generics Fundamentals in Typescript&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-08T07:56:26.548Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fcf7dc3-4ac4-41ea-a600-63a30d272b3f_3980x2184.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/making-generics-types-optional-generics&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142908175,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;15d1a297-af5f-42de-a510-0cf35a71bb22&quot;,&quot;caption&quot;:&quot;The first draft of this issue was written almost a year ago, in a hotel room in Amsterdam. I didn&#8217;t think I was going to be publishing, but I thought why not? Any, I digress, I hope you are going to enjoy it. For a while now, I have been to write an issue that explores the relationship between Typescript and Javascript. While Javascript can exist without&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Typescript and JavaScript - Two Sides of the Same Coin&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-15T05:10:38.049Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78c5da7e-2506-4579-b81d-8b845132742f_5904x3320.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/typescript-and-javascript-two-sides&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:129113790,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;dea07c1d-006b-49e4-832a-6e5651a4dba0&quot;,&quot;caption&quot;:&quot;One important mental model to form in Typescript is the relationship between types and their subtypes. Typescript is based on structural sub-typing, where when type-checking whether one type can be assigned to another, it checks on the members/properties present, and if all members are present, it allows the assignment.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Types and Subtypes Relationship in Typescript &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-29T06:45:44.351Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fafa3df-4b63-4f51-b279-91a600992102_3840x2160.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/types-and-subtypes-relationship-in&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:113714535,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><p><strong>If you like my content and want to support my work, please consider supporting me (</strong><em><strong>you can buy me a double latte, the juice that powers my creativity and determination &#9749;&#65039;</strong></em><strong>) through <a href="https://github.com/sponsors/mainawycliffe/">Github Sponsors</a>.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/sponsors/mainawycliffe/&quot;,&quot;text&quot;:&quot;&#9749;&#65039; Consider buying me a cup of coffee&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://github.com/sponsors/mainawycliffe/"><span>&#9749;&#65039; Consider buying me a cup of coffee</span></a></p><div><hr></div><h2>From Other Authors</h2><h4><a href="https://deno.com/blog/intro-to-tsconfig">An intro to TSConfig for JavaScript Developers by Jo Franchetti</a></h4><p>Have you ever wanted to understand the tsconfig. Jo Franchetti goes over the tsconfig, the different settings available, and its capabilities in this post.</p><p><a href="https://deno.com/blog/intro-to-tsconfig">Link</a></p><h4><a href="https://deno.com/blog/jsr_open_beta">Introducing JSR - the JavaScript Registry</a></h4><p>The Deno team introduced a new Javascript Registry optimized for Typescript and ESM Modules. In a series of posts, the registry discusses what JSR is and isn&#8217;t and why you should consider using it.</p><p>Here is a list of the most interesting blog posts about the registry from the Deno team.</p><ul><li><p>I<a href="https://deno.com/blog/jsr_open_beta">ntroducing JSR - the JavaScript Registry</a></p></li><li><p><a href="https://deno.com/blog/how-we-built-jsr?ref=dailydev">How we built JSR</a></p></li><li><p><a href="https://deno.com/blog/jsr-is-not-another-package-manager">JSR Is Not Another Package Manager</a></p></li></ul><h4><a href="https://blog.jetbrains.com/qodana/2024/04/improving-code-quality-in-javascript-projects-with-qodana/">Improving Code Quality in JavaScript Projects With Qodana by Maksim Grushchenko and Kerry Beetge</a></h4><p>JetBrains Qodana is a powerful static code analysis platform that enables teams to analyze code quality and find issues before runtime. This article discusses how to utilize Qodan to improve code quality for JS projects.</p><p><a href="https://blog.jetbrains.com/qodana/2024/04/improving-code-quality-in-javascript-projects-with-qodana/">Link</a></p><h4><a href="https://dev.to/symplymuslimah12/understanding-use-strict-in-javascript-4ik3">Understanding 'Use strict' in JavaScript by Muslimat Mojeed</a></h4><p>Strict mode is a special mode in JavaScript that allows developers to opt into a set of rules and restrictions that are not enforced by default.<br>Strict mode in JavaScript is like having a helpful friend who keeps an eye out for mistakes while you're coding.</p><p><a href="https://dev.to/symplymuslimah12/understanding-use-strict-in-javascript-4ik3">Link</a></p><h4><a href="https://www.danielfullstack.com/article/this-typescript-trick-will-blow-your-mind">This TypeScript Trick Will Blow Your Mind by Daniel Craciun</a></h4><p>Daniel Craciun takes us through extracting types from arrays by creating a custom utility type.</p><p><a href="https://www.danielfullstack.com/article/this-typescript-trick-will-blow-your-mind">Link</a></p><h4><a href="https://frontendmasters.com/blog/node-js-debugging-in-chrome-devtools/">Node.js Debugging in Chrome DevTools by Frontend Masters</a></h4><p>Learn how you can utilize Chrome DevTools to debut NodeJS and Javascript applications.</p><p><a href="https://frontendmasters.com/blog/node-js-debugging-in-chrome-devtools/">Link</a></p><div><hr></div><p>That's it for this issue. Thank you for getting this far. If you enjoyed this article and would like to support my work, please share and like this issue and consider sharing All Things Typescript with friends and colleagues.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share All Things Typescript&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share All Things Typescript</span></a></p><p>Did you know you can hire me to coach your team and help them improve their Typescript skills? If this interests you, please contact me to discuss it.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43214086,&quot;userName&quot;:&quot;Maina Wycliffe&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p>And until next time, please keep on learning.</p>]]></content:encoded></item><item><title><![CDATA[March 2024 Monthly Newsletter - TypeScript 5.5 is going to be huge]]></title><description><![CDATA[Typescript 5.4 released, Typescript 5.5 around the corner with some exciting news and hand curated content for Typescript.]]></description><link>https://www.allthingstypescript.dev/p/feb-2024-monthly-newsletter-typescript-4cd</link><guid isPermaLink="false">https://www.allthingstypescript.dev/p/feb-2024-monthly-newsletter-typescript-4cd</guid><dc:creator><![CDATA[Maina Wycliffe]]></dc:creator><pubDate>Mon, 01 Apr 2024 19:26:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9b2bb306-829c-4c93-b6a3-8021f465745e_1476x830.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey Everyone, another month is gone, and today is the day I look at informative content that I came across in the last month and also news related to Typescript. </p><p>My name is Maina Wycliffe, and I love teaching Typescript to developers, my goal is to break down complex topics into small understandable bits that you can apply in your day-to-day life as a developer.</p><h3>Typescript News</h3><p>Over the last two issues, we have looked at the release process of Typescript 5.4 which was released last month, so I won&#8217;t focus on that on this issue, you can learn more about Typescript 5.4 <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/">here</a>. </p><p>For this issue, I want to focus on the next version of Typescript which has the potential to be huge. First, before proceeding further, I want to state we are still early and some of the details might change as we get closer to the next issue. Now, that that is out of the way, let me focus on a few interesting changes:</p><ol><li><p>APIs marked in version 5 as deprecated are going to be removed, for more information, check out this <a href="https://github.com/microsoft/TypeScript/issues/51909">issue</a>.</p></li><li><p>Ability to add imports, when you copy-paste code from another TS file, the same imports in that file, for information, check out this issue.</p></li><li><p>Narrowing of generics indexed access type return type, for more information, take a look at this <a href="https://github.com/microsoft/TypeScript/issues/33014">issue</a>.</p></li><li><p>And many more such as providing syntax checking for regex, for more information, check out the road map <a href="https://github.com/microsoft/TypeScript/issues/57475">here</a>.</p></li></ol><p>Let me know if there are features you want me to cover in a future issue of All Things Typescript.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>From All Things Typescript</h2><p>This month, I wrote two articles that explain generics which I hope for those of you who have read them and found very useful.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;af446a6f-3edc-42e0-8aa8-1693af3e25f6&quot;,&quot;caption&quot;:&quot;One of the more advanced topics in Typescript is Generics and understanding and adding them to your Typescript coding toolbox can be very powerful. As we continue with our journey of learning Typescript and building amazing projects, we want to have more and more tools that we can use to make our job easier, without making compromises when possible.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A Gentle Introduction to Generics in Typescript&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-11T05:58:29.780Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcd0c857-8ca0-409a-bd1c-3154597b94c8_9048x5612.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/a-gentle-introduction-to-generics&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142444537,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:2,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;7ad3591a-9443-4603-8fad-9053842bf422&quot;,&quot;caption&quot;:&quot;In the last issue two weeks ago, we learned about the fundamentals of Generics in Typescript and how we can use generics to make our lives easier as developers. You can find the last issue here. But to quickly recap the last issue, Generics allows us to write our code in a way the data types we are dealing with will be specified later on. In Typescript,&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Generic Constraints - A Gentle Introduction to Generics in Typescript&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-25T07:46:15.377Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f2e90f9-c389-4f85-9c33-83f867961bf0_9992x5620.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/generic-constraints-a-gentle-introduction&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142671089,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>From other Authors</h2><h4><a href="https://fettblog.eu/typescript-never-and-error-handling/">The `never` type and error handling in TypeScript by Stefan Baumgartner</a></h4><p>This article by Stefan Baumgartner goes on to explain more about the never type, common misunderstandings about the never type, and how to correctly handle the never type for handling errors.</p><p>For more information, you can go through the article <a href="https://fettblog.eu/typescript-never-and-error-handling/">here</a>.</p><h4><a href="https://www.totaltypescript.com/react-apps-ts-performance">This Pattern Will Wreck Your React App's TS Performance by Matt Pocock</a></h4><p>In this article by Matt Pocock, he looks at a case where using one way of defining Typescript type can slow down your IDE performance compared to another way, especially in a large code base.</p><p>For more information, you can go through the article <a href="https://www.totaltypescript.com/react-apps-ts-performance">here</a>.</p><h4><a href="https://www.telerik.com/blogs/making-your-code-type-safe-zod">Making Your Code Type-Safe with Zod by Leonardo Maldonado</a></h4><p>In the past, I have made it clear I am a huge fan of tools like Zod which look to combine schema validation for forms, and runtime data validation, while also getting back to static types for you to use in Typescript. This article takes you through the process of setting up Zod and using it to make your code type-safe with Zod.</p><p>For more information, you can go through the article <a href="https://www.telerik.com/blogs/making-your-code-type-safe-zod">here</a>.</p><h4><a href="https://www.totaltypescript.com/react-apps-ts-performance">`any` Considered Harmful, Except For These Cases by Matt Pocock</a></h4><p>If there is anything I have spent a large amount of time doing in this newsletter, is discouraging you not to use any. In software engineering, it&#8217;s quite rare we have a definite answer the correct answer is always, it depends and this article by Matt Pocock is a great example of situations where it&#8217;s acceptable to use any.</p><p>For more information, you can go through the article <a href="https://www.totaltypescript.com/any-considered-harmful">here</a>.</p><h4><a href="https://claritydev.net/blog/intersection-types-in-typescript">Intersection Types In TypeScript by Alex Khomenko</a></h4><p>This article by Alex Khomenko takes you through an introduction and a detailed description of what the intersection types are and how you can add them to your toolbox and be comfortable using them in your day-to-day activities.</p><p>For more information, you can go through the article <a href="https://claritydev.net/blog/intersection-types-in-typescript">here</a>.</p><h4><a href="https://dev.to/this-is-learning/typescript-intermediates-type-generics-b84">TypeScript Intermediates - Type Generics by Corbin Crutchley</a></h4><p>This article by Corbin Crutchley is about generics and some real-world uses for generics. He goes into detail explaining a use case, and looks at alternative solutions, before explaining why generics are a good fit and why you might consider using generics for that use case.</p><p>For more information, you can go through the article <a href="https://dev.to/this-is-learning/typescript-intermediates-type-generics-b84">here</a>.</p><div><hr></div><p>That&#8217;s it for now and I will see you again at the end of April, where I will share some interesting reads that I will come across in my learning journey in April. Until then, I will continue teaching Typescript, and next week, we will take a look at Typescript Generics and default values, to wrap up my generics series.</p><p>If you found this issue useful, consider subscribing, if you haven&#8217;t and if you have (Thank you &#10084;&#65039;) please consider sharing All Things Typescript with your friends and colleagues.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share All Things Typescript&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share All Things Typescript</span></a></p><p>Until next, keep on learning.</p>]]></content:encoded></item><item><title><![CDATA[Feb 2024 Monthly Newsletter - TypeScript 5.4 RC and more]]></title><description><![CDATA[A hand-curated list of Articles and Videos from All Things Typescript and other authors for the month of February 2024.]]></description><link>https://www.allthingstypescript.dev/p/feb-2024-monthly-newsletter-typescript</link><guid isPermaLink="false">https://www.allthingstypescript.dev/p/feb-2024-monthly-newsletter-typescript</guid><dc:creator><![CDATA[Maina Wycliffe]]></dc:creator><pubDate>Mon, 04 Mar 2024 05:17:05 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d8f80071-10da-402d-9902-a464ad782d64_3840x2160.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone, my name is Maina Wycliffe. Every month, I curate a list of resources related to Typescript (and related stacks) that I find interesting and informative in the month. In this issue, we take a look at some of the interesting content I came across in the last month.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><h2>Announcements</h2><h4><a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-4-rc/">Typescript 5.4 RC Released </a></h4><p>We are getting closer to the release of Typescript 5.4 and in February, the release candidate was announced.</p><p>Here is a summary of the features to expect:</p><ul><li><p>Assignment Narrowing is Preserved in Closures</p></li><li><p>New <strong>NoInfer</strong> Utility Type</p></li><li><p>Type Declarations for <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy">Object.groupBy</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/groupBy">Map.groupBy</a></p></li><li><p>Support for require() calls in <code>--moduleResolution</code> bundler and <code>--module preserve</code></p></li><li><p>Checked Import Attributes and Assertions</p></li><li><p>Quick Fix for Adding Missing Parameters</p></li></ul><p><em>Let me know if there are any features you want me to take a look at in the next few issues of All Things Typescript.</em></p><p>Please check out the release blog post <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-4-rc/">here</a> for more information about the above features.</p><h2>All Things Typescript Feb 2024 Issues</h2><p>In February, I consistently released articles every week, except one. In case you missed any, here is a list of the issues that I released in February.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;be2e2b2c-f2dc-40b3-a2d7-9b24ee5ce6f0&quot;,&quot;caption&quot;:&quot;In Typescript version 4.9, Typescript introduced the satisfies operator. Over the last few months, I have seen examples of it being used out in the world more often, and even I have found myself getting comfortable using it. In this issue, I want to do a deep dive and try and answer the following questions:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A Deep Dive into the satisfies operator in Typescript&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-02-24T20:07:07.093Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/150f856f-0aa6-4ab9-9b1b-34d4d178743a_3136x1788.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/a-deep-dive-into-the-typescript-satisfies&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:141990708,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;086b8909-0744-407e-b435-abcf5ce6fa7b&quot;,&quot;caption&quot;:&quot;Let&#8217;s start with a simple hypothesis. Let&#8217;s say you have a form for your users, for instance, a sign-in form. You need a validation schema and a Typescript type, representing the shape of the form data. Why a validation schema, you may ask? This is because data coming from untrusted sources should always be validated, for instance, form data, ensuring t&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Schema First Typescript Types Design with Valibot&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Author of All Things Typescript and Google Developer Expert for Angular&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/623bca1e-4bc1-4d0c-a173-cc5337080e98_1151x1728.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-02-12T06:19:15.080Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b449bb1-5363-415b-8f8b-01ccd839aa96_1280x853.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/schema-first-typescript-types-design&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:141422661,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h2>From other authors</h2><h3>Articles</h3><h4><a href="https://www.totaltypescript.com/as-never">When 'as never' Is The Only Thing That Works by Matt Pocock</a></h4><p><strong>TLDR</strong>: <code>as never</code> is very occasionally needed in TypeScript. Let's look at an example where it's necessary.</p><p><a href="https://www.totaltypescript.com/as-never">Link</a></p><h4><a href="https://claritydev.net/blog/typescript-generics-guide">Using Generics In TypeScript: A Practical Guide by Alex Khomenko</a></h4><p><strong>TLDR</strong>: Among these features, generics stand out as one of the most powerful tools for creating flexible, reusable components without sacrificing type safety. In this blog post, we'll dive into the world of generics in TypeScript, exploring how they can be used to write cleaner, more maintainable code that is robust and easy to understand.</p><p><a href="https://claritydev.net/blog/typescript-generics-guide">Link</a></p><h4><a href="https://claritydev.net/blog/advanced-conditional-types-typescript">TypeScript Advanced Types: Working with Conditional Types by Alex Khomenko</a></h4><p><strong>TLDR</strong>: Conditional types in TypeScript provide logic to type definitions, allowing for type transformations based on certain conditions. They can be used for type inference, filtering types with utility types, building type-safe API handlers, and defensive programming. Best practices include keeping conditions simple, using type aliases and utility types, and testing types. Limitations include operating at compile-time only and not being suitable for all use cases.</p><p><a href="https://claritydev.net/blog/advanced-conditional-types-typescript">Link</a></p><h4><a href="https://dev.to/mochafreddo/understanding-asyncawait-and-promises-in-javascript-and-typescript-d0n">Understanding Async/Await and Promises in JavaScript and TypeScript by Geoffrey Kim</a></h4><p><strong>TLDR</strong>: This blog post aims to demystify the scenarios where you might or might not need to use <code>await</code> when dealing with Promises, through detailed explanations and illustrations.</p><p><a href="https://dev.to/mochafreddo/understanding-asyncawait-and-promises-in-javascript-and-typescript-d0n">Link</a></p><h4><a href="https://www.freecodecamp.org/news/basic-typescript-types/">How Types Work in TypeScript &#8211; Explained with JavaScript + TypeScript Code by Sahil Mahapatra</a></h4><p><strong>TLDR</strong>:  In this comprehensive guide, we'll explore TypeScript's basic types by comparing them with their JavaScript counterparts. I'll also clarify the differences and advantages offered by TypeScript's static typing features.</p><p><a href="https://www.freecodecamp.org/news/basic-typescript-types/">Link</a></p><h4><a href="https://johnnyreilly.com/typescript-eslint-no-unused-vars">ESLint no-unused-vars: _ ignore prefix by John Reilly</a></h4><p><strong>TLDR</strong>: One thing that I missed when switching to the ESLint option is that, with <code>noUnusedLocals</code> and <code>noUnusedParameters</code>, you can simply ignore unused variables by prefixing a variable with the <code>_</code> character. That's right, sometimes I want to declare a variable that I know I'm not going to use, and I want to do that without getting shouted at by the linter.</p><p>It turns out you can get ESLint to respect the TypeScript default of ignoring variables prefixed with <code>_</code>; <a href="https://github.com/typescript-eslint/typescript-eslint/issues/8464#issuecomment-1943325441">it's just not the default configuration for </a><code>no-unused-vars</code>. But with a little configuration, we can have it. This post is a quick guide to how to implement that configuration.</p><p><a href="https://johnnyreilly.com/typescript-eslint-no-unused-vars">Link</a></p><h3>Videos</h3><h4>There&#8217;s a fast new code editor in town by Fireship</h4><div id="youtube2-JGz7Ou0Nwo8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;JGz7Ou0Nwo8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/JGz7Ou0Nwo8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h4>8 NEW JavaScript 2024 Features by Web Dev Simplified</h4><div id="youtube2-duNEnLUxie8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;duNEnLUxie8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/duNEnLUxie8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h4>I didn't know snapshot testing was a thing by Joshua Morony</h4><div id="youtube2-jfsgSiMwt3U" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;jfsgSiMwt3U&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/jfsgSiMwt3U?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p><strong>If you like my content and want to support my work, please consider supporting me (</strong><em><strong>you can buy me a double latte, the juice that powers my creativity and determination &#9749;&#65039;</strong></em><strong>) through <a href="https://github.com/sponsors/mainawycliffe/">Github Sponsors</a>.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/p/a-deep-dive-into-the-typescript-satisfies?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MzIxNDA4NiwicG9zdF9pZCI6MTQxOTkwNzA4LCJpYXQiOjE3MDk0NzQ1NTMsImV4cCI6MTcxMjA2NjU1MywiaXNzIjoicHViLTEwMjU1NjEiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.wYCRh5-ceyKVcvSI58AVTf_9d2o6TBCWNVO-_lVlSiE&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.allthingstypescript.dev/p/a-deep-dive-into-the-typescript-satisfies?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&amp;token=eyJ1c2VyX2lkIjo0MzIxNDA4NiwicG9zdF9pZCI6MTQxOTkwNzA4LCJpYXQiOjE3MDk0NzQ1NTMsImV4cCI6MTcxMjA2NjU1MywiaXNzIjoicHViLTEwMjU1NjEiLCJzdWIiOiJwb3N0LXJlYWN0aW9uIn0.wYCRh5-ceyKVcvSI58AVTf_9d2o6TBCWNVO-_lVlSiE"><span>Share</span></a></p><div><hr></div><p>That's all for now. I'll see you again at the end of February for another monthly recap.</p>]]></content:encoded></item><item><title><![CDATA[Jan 2024 Top Articles and Resources]]></title><description><![CDATA[Articles and Learning Resources that I found useful in January 2024.]]></description><link>https://www.allthingstypescript.dev/p/jan-2024-top-articles-and-resources</link><guid isPermaLink="false">https://www.allthingstypescript.dev/p/jan-2024-top-articles-and-resources</guid><dc:creator><![CDATA[Maina Wycliffe]]></dc:creator><pubDate>Mon, 05 Feb 2024 08:25:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/94cff8ed-4394-45e7-88ef-ea5c94a47d4a_1280x853.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everyone,</p><p>I am very excited to let you know that starting in January 2024, I will be sending out a monthly curated list of top articles and resources related to Typescript and other relevant technologies. This list will be sent out on the first Monday following the end of each month.</p><p>Although I share these articles on my social media, I wanted to create a central place where all of my subscribers could find all the useful resources related to Typescript I come across regularly. This is a return to the roots of the contents of this Newsletter, which was mainly focused on curating Typescript resources. </p><p>For those who are still interested in my regular content, don't worry, as it will continue to be sent out every week.</p><p>I appreciate your support.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading All Things Typescript! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Announcement</h3><h4><a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-4-beta/">TypeScript 5.4 Beta Announced</a></h4><p>In late January, the beta version of Typescript 5.4 was released. Some of its features include:</p><ul><li><p>Assignment Narrowing is Preserved in Closures</p></li><li><p>New <strong>NoInfer</strong> Utility Type</p></li><li><p>Type Declarations for <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy">Object.groupBy</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/groupBy">Map.groupBy</a></p></li><li><p>Support for require() calls in <code>--moduleResolution</code> bundler and <code>--module preserve</code></p></li><li><p>Checked Import Attributes and Assertions</p></li><li><p>Quick Fix for Adding Missing Parameters</p></li></ul><p>For more information, check out the official announcement <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-5-4-beta/">here</a>.</p><div><hr></div><h3>My Articles</h3><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;fbabaded-e153-4e0c-ac1e-d1005e614885&quot;,&quot;caption&quot;:&quot;Bun is a JS/TS runtime environment, a package manager, a test runner, and bundler for your TS/JS Project. Should you consider it?&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Bun - The One Tool for All Your JavaScript/Typescript Project's Needs?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43214086,&quot;name&quot;:&quot;Maina Wycliffe&quot;,&quot;bio&quot;:&quot;Software Engineer, Google Developer Expert and Typescript Nerd.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8765c349-75ba-43ee-9976-e3ae5631b064_904x1124.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-01-29T07:05:28.656Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3d8e88d-87c6-4c6f-bda2-7ed3300f1a7d_1280x675.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.allthingstypescript.dev/p/bun-one-tool-for-all-your-javascripttypescript&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:139489394,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:2,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;All Things Typescript&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7922083f-3e29-485a-ab34-3b07ac80034c_1084x1084.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h3>Articles</h3><h4><a href="https://thenewstack.io/daniel-rosenwasser-on-typescript-and-whats-ahead-in-2024/">Daniel Rosenwasser on TypeScript and What&#8217;s Ahead in 2024 by Loraine Lawson</a></h4><p>In this Q&amp;A with The New Stack, Rosenwasser shared TypeScript&#8217;s most significant developments in 2023 and provided a preview of what developers can expect to see in the coming year.</p><p><a href="https://thenewstack.io/daniel-rosenwasser-on-typescript-and-whats-ahead-in-2024/">Link</a></p><h4><a href="https://www.totaltypescript.com/tutorials/solving-typescript-errors">Solving TypeScript Errors by Matt Pocock</a></h4><p>In this tutorial, you'll find challenges centered around reading error messages and practical solutions to solving the issues they describe.</p><p><a href="https://www.totaltypescript.com/tutorials/solving-typescript-errors">Link</a></p><h4><strong><a href="https://bun.sh/blog/the-bun-shell">The Bun Shell by Jarred Sumner</a></strong></h4><p>The Bun Shell is a new experimental embedded language and interpreter in Bun that allows you to run cross-platform shell scripts in JavaScript &amp; TypeScript.</p><p><a href="https://bun.sh/blog/the-bun-shell">Link</a>.</p><h4><strong><a href="https://timdeschryver.dev/blog/using-zods-schema-to-render-a-reusable-and-dynamic-angular-table-component">Using Zod's schema to render a reusable and dynamic Angular table component by Tim Deschryver</a></strong></h4><p>In this blog post, we'll see how to use Zod to dynamically build a (minimal) table as a reusable and typesafe Angular component. For this, the following <code>Person</code> schema will be used within the next snippets.</p><p><a href="https://timdeschryver.dev/blog/using-zods-schema-to-render-a-reusable-and-dynamic-angular-table-component">Link</a></p><h4><a href="https://blog.jetbrains.com/webstorm/2024/01/everything-you-ve-always-wanted-to-know-about-typescript-s-integration-in-webstorm/?ref=dailydev">Everything You&#8217;ve Always Wanted to Know About TypeScript&#8217;s Integration in WebStorm by Jan-Niklas Wortmann</a></h4><p>Ever tense up when a new TypeScript version drops? You cross your fingers and hope it plays nice with your IDE. You&#8217;re not alone. Relax into this fireside chat with WebStorm lead developer and Team Lead, Andrey Starovoyt, as we pull back the curtain on TypeScript&#8217;s integration in WebStorm.</p><p><a href="https://blog.jetbrains.com/webstorm/2024/01/everything-you-ve-always-wanted-to-know-about-typescript-s-integration-in-webstorm/?ref=dailydev">Link</a></p><h4><a href="https://advancedweb.hu/modern-javascript-library-starter/">Modern JavaScript library starter by Tam&#225;s Sallai</a></h4><p>How to publish a package with TypeScript, testing, GitHub Actions, and auto-publish to NPM</p><p><a href="https://advancedweb.hu/modern-javascript-library-starter/?ref=dailydev">Link</a></p><h4><a href="https://medium.com/javascript-scene/tdd-writing-testable-code-30ac7a3bf49c">TDD: Writing Testable Code by JavaScript Scene by Eric Elliott</a></h4><p>Writing testable code is a vital skill in software engineering. Let&#8217;s explore practical advice, strategies, and tactics for writing more testable code, unlocking the benefits of modularity, reusability, and high quality software in your projects.</p><p><a href="https://medium.com/javascript-scene/tdd-writing-testable-code-30ac7a3bf49c">Link</a></p><h4><a href="https://dev.to/nazeelashraf/writing-type-safe-api-clients-in-typescript-1j92">Writing type safe API clients in TypeScript by Nazeel</a></h4><p>Writing API integrations can be a daunting task. But it does not need to be. How many times have you had to deal with these problems?</p><p><a href="https://dev.to/nazeelashraf/writing-type-safe-api-clients-in-typescript-1j92">Link</a></p><h4><a href="https://blog.logrocket.com/typescript-domain-driven-design/">Leveraging TypeScript for domain-driven design by Matteo Di Pirro</a></h4><p>Domain-driven design (DDD) is a software development approach that aims to simplify the creation of applications that involve complex business logic. In this article, we&#8217;ll explore how to leverage TypeScript for DDD. TypeScript&#8217;s sophisticated type system enables fine-grained domain modeling and is highly adaptable, lending itself to complex app development.</p><p><a href="https://blog.logrocket.com/typescript-domain-driven-design/">Link</a></p><h4><a href="https://spin.atomicobject.com/discriminated-unions-typescript/">The Discriminated Union: Writing Easy-to-Use Types in TypeScript by Peter Van Drunen</a></h4><p>TypeScript&#8217;s flexibility is one of the reasons I love using it. Unfortunately, that flexibility also provides opportunities to write confusing code. The main area where I see developers struggling is defining types that make writing code painful or verbose. Often, this comes in the form of using <a href="https://spin.atomicobject.com/optional-undefined-typescript/">optional</a> fields to extend types so they represent too many ideas within the same type.</p><p><a href="https://spin.atomicobject.com/discriminated-unions-typescript/?ref=dailydev">Link</a></p><div><hr></div><p>That's all for now. I'll see you again at the end of February for another monthly recap.</p>]]></content:encoded></item><item><title><![CDATA[Top Articles of the Week - 2nd of Sep 2022 - All Things Typescript]]></title><description><![CDATA[Good afternoon; I hope you had a fantastic week.]]></description><link>https://www.allthingstypescript.dev/p/top-articles-of-the-week-2nd-of-sep</link><guid isPermaLink="false">https://www.allthingstypescript.dev/p/top-articles-of-the-week-2nd-of-sep</guid><dc:creator><![CDATA[Maina Wycliffe]]></dc:creator><pubDate>Fri, 02 Sep 2022 10:07:59 GMT</pubDate><enclosure url="https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2aad6921-1d5e-4bee-b733-8e1c8e510f1e_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Good afternoon; I hope you had a fantastic week. Earlier this week, I <a href="https://www.allthingstypescript.dev/p/if-it-looks-like-a-duck-walks-like">announced</a> I am separating the hand-curated section of my newsletter to a dedicated post on its own, and this is it. Here, I will send out, every Friday, articles that I have hand curated for you to read and continue in your journey to understand and master Typescript and its Typing system.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/subscribe?"><span>Subscribe now</span></a></p><p>Without further ado, let's get started:</p><h2>Top Articles of the Week - 2nd of Sep 2022</h2><h4><a href="https://www.allthingstypescript.dev/p/if-it-looks-like-a-duck-walks-like">Structural Typing in Typescript - If it looks like a duck, walks like a duck, quacks like a duck &#8230;</a></h4><p><strong>by <a href="https://twitter.com/mwycliffe_dev">Maina Wycliffe</a></strong></p><p>How do you test whether a bird is a duck? One approach would be to ask a series of questions, and the answers would dictate whether it&#8217;s a duck:</p><ul><li><p>Does it look like a duck?</p></li><li><p>Does it walk like a duck?</p></li><li><p>Does it quack like a duck?</p></li></ul><p>If the answer to all those questions is yes, then we can conclude it must be a duck. We are checking whether the bird in question models the behavior we expect from a duck, and if it matches up, we can then conclude it&#8217;s a duck with a certain level of certainty. This is popularly known as the duck test, and Typescript type checking operates similarly. This is known as structural typing or property-based typing.</p><p><a href="https://www.allthingstypescript.dev/p/if-it-looks-like-a-duck-walks-like">Link</a></p><h4><a href="https://blog.nrwl.io/the-butterfly-effect-how-we-gave-linter-100x-boost-71a516750d19">The Butterfly Effect: How we gave the Linter a 100x boost</a></h4><p><strong>by Miroslav Jona&#353;</strong></p><p>Recently we had a significant performance improvement in our linter rule. In some benchmarks, the increase was <strong>up to 100x</strong>! While one would expect such a dramatic change to result from implementing a sophisticated algorithm, the reality is that this resulted from minor tweaks. Like <strong>the butterfly effect</strong> &#8212; changing a few lines of code created a ripple effect that tremendously improved the overall performance.</p><p><a href="https://blog.nrwl.io/the-butterfly-effect-how-we-gave-linter-100x-boost-71a516750d19">Link</a></p><h4><a href="https://betterprogramming.pub/getting-started-testing-types-in-typescript-f64306ec16b">Getting Started With Testing Types in TypeScript</a></h4><p><strong>by Nic Jennings</strong></p><p>As soon as you start writing more advanced types such as G<a href="https://www.typescriptlang.org/docs/handbook/2/generics.html">enerics</a> or <a href="https://www.typescriptlang.org/docs/handbook/2/conditional-types.html">Conditional Types</a> in <a href="https://www.typescriptlang.org/">TypeScript</a> then it should become a crucial step in checking that your type is doing exactly what you expect. Testing Types is a little different to writing your normal Unit Tests as we are testing untranspiled code.</p><p>There are three main options when it comes to testing types: Using a tool like <a href="https://github.com/microsoft/DefinitelyTyped-tools/tree/master/packages/dtslint">dtslint</a>, <a href="https://github.com/SamVerschueren/tsd">tsd</a> or making use of the <a href="https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#-ts-expect-error-comments">@ts-expect-error</a> comment. I will be covering <a href="https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#-ts-expect-error-comments">@ts-expect-erro</a>r as this is the easiest way to get started and it requires no additional tooling.</p><p><a href="https://betterprogramming.pub/getting-started-testing-types-in-typescript-f64306ec16b">Link</a></p><h4><a href="https://oscar-reyes.medium.com/immutability-with-typescript-fdfc47508592">Immutability with Typescript</a></h4><p><strong>by Oscar</strong></p><p>The next step to learn how to use functional programming with Typescript is to understand the concept of Immutability.</p><p>If we go by the dictionary description we can simply say that Immutability means &#8220;not capable of or susceptible to change&#8221;.</p><p><a href="https://oscar-reyes.medium.com/immutability-with-typescript-fdfc47508592">Link</a></p><h4><a href="https://endtimes.dev/why-your-website-should-be-under-14kb-in-size/">Why your website should be under 14kb in size</a></h4><p><strong>by Nathaniel</strong></p><p>Having a smaller website makes it load faster &#8212; that's not surprising.</p><p>What is surprising is that <strong>a </strong><code>14kB</code> page can load much faster than a <code>15kB</code> page &#8212; maybe <code>612ms</code> faster &#8212;&nbsp;while the difference between a <code>15kB</code> and a <code>16kB</code> page is trivial.</p><p><a href="https://endtimes.dev/why-your-website-should-be-under-14kb-in-size/">Link</a></p><h4><a href="https://betterprogramming.pub/build-your-own-git-with-typescript-64571ae7c6d0">Build Your Own Git With TypeScript</a></h4><p><strong>by Maxsuel Silva</strong></p><p>In today&#8217;s experiment, I want to share with you how to build a few features of Git with TypeScript. Of course there would exist better ways to do it, but here&#8217;s how I can see and solve the problem. This is a simplistic point of view of a complex thing, I hope you enjoy it.</p><p><a href="https://betterprogramming.pub/build-your-own-git-with-typescript-64571ae7c6d0">Link</a></p><h4><a href="https://betterprogramming.pub/how-to-improve-the-jest-performance-in-ci-environments-when-using-typescript-66a186cb5cd4">How To Improve the Jest Performance in CI Environments When Using TypeScript</a></h4><p><strong>by Carlos Fernando Arboleda Garc&#233;s</strong> </p><p>Every single developer or developer team must make decisions when building a new project, and in this case, we are talking about Node.js projects. When talking about JavaScript development, one of the best decisions you can make is to use TypeScript since this will give you extra tools to write a more clear and maintainable code.</p><p>Another good decision is to add a test framework or library to your project, and it&#8217;s not a secret that Jest is currently the most used framework and is a good choice since it has a powerful built-in assertion library.</p><p><a href="https://betterprogramming.pub/how-to-improve-the-jest-performance-in-ci-environments-when-using-typescript-66a186cb5cd4">Link</a></p><h4><a href="https://www.freecodecamp.org/news/how-to-optimize-nodejs-apis/">How to Optimize Your Node.js API</a></h4><p><strong>by Kayode Adeniyi</strong></p><p>Optimization involves improving the response time of your API. The shorter the response time is, the faster the API will be.</p><p>The tips I will share in this article will help you reduce response time, lower latency, manage errors and throughput, and minimize CPU and memory usage.</p><p><a href="https://www.freecodecamp.org/news/how-to-optimize-nodejs-apis/">Link</a></p><h4><a href="https://betterprogramming.pub/7-shell-shortcuts-to-speed-up-development-439943247eea">7 Shell Shortcuts To Speed Up Development</a></h4><p><strong>by Tate Galbraith</strong></p><p>With the advent of elegant, full-service IDEs there are now fewer and fewer command-line interactions by developers. When you can install a package or manage files from a pretty UI why would you need an arsenal of outdated shell tricks? If you&#8217;ve ever run into a problem that couldn&#8217;t be solved by a fancy IDE then you&#8217;ll understand why having these tools at your disposal is of paramount importance.</p><p>In this article, we&#8217;ll discover some simple, yet incredibly effective shell shortcuts and commands. Using these tips you can troubleshoot errors quickly, run commands faster and execute searches with minimal effort.</p><p><a href="https://betterprogramming.pub/7-shell-shortcuts-to-speed-up-development-439943247eea">Link</a></p><h4><a href="https://netbasal.com/accessible-lists-made-easy-using-the-angular-cdk-listbox-module-62ec21691742">Accessible Lists Made Easy Using the Angular CDK Listbox Module</a></h4><p><strong>By Netanel Basal</strong></p><p>Fortunately, starting from version 14.2.0, this is made seamless by the Angular CDK. A new module named @angular/cdk/listbox provides directives to help create accessible custom list boxes.</p><p><a href="https://netbasal.com/accessible-lists-made-easy-using-the-angular-cdk-listbox-module-62ec21691742">Link</a></p><h2>Conclusion</h2><p>That&#8217;s it from me and I hope you found the above list enlightening. I hope you have a fantastic weekend and see you next week. </p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/p/top-articles-of-the-week-2nd-of-sep?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">If you found this newsletter helpful, consider sharing &#10084;&#65039;</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.allthingstypescript.dev/p/top-articles-of-the-week-2nd-of-sep?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.allthingstypescript.dev/p/top-articles-of-the-week-2nd-of-sep?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item></channel></rss>