<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mayowa Obisesan</title>
    <description>The latest articles on Forem by Mayowa Obisesan (@amtheblessed).</description>
    <link>https://forem.com/amtheblessed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1082703%2F23956754-7242-4012-aefe-4889f65e23ca.jpg</url>
      <title>Forem: Mayowa Obisesan</title>
      <link>https://forem.com/amtheblessed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/amtheblessed"/>
    <language>en</language>
    <item>
      <title>Why JavaScript's Object.assign()?</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Wed, 04 Jun 2025 23:15:13 +0000</pubDate>
      <link>https://forem.com/amtheblessed/why-javascripts-objectassign-569m</link>
      <guid>https://forem.com/amtheblessed/why-javascripts-objectassign-569m</guid>
      <description>&lt;p&gt;In this era of AI generated code, you will see some logic generated by AI. An example of such is, &lt;code&gt;Object.assign()&lt;/code&gt;. So if you have also come across this and don’t know what it means, this article aims to do justice to that. Let’s dive into it.&lt;/p&gt;

&lt;p&gt;In modern JavaScript, a few methods quietly do the heavy lifting behind the scenes. One of those method is &lt;code&gt;Object.assign()&lt;/code&gt;. While it might not have the flair of new syntax or frameworks, it plays a critical role in data manipulation, state management, and object composition. Note the Object composition.&lt;/p&gt;

&lt;p&gt;By the end of this article, you should know what Object.assign() is, how it works, what it’s good for and where it can bite you if you’re not careful.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Exactly Is &lt;code&gt;Object.assign()&lt;/code&gt;?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Introduced in ECMAScript 2015 (ES6), &lt;code&gt;Object.assign()&lt;/code&gt; is a static method on the global Object constructor. Its job is simple but powerful, it is meant to: &lt;strong&gt;copy the values of all enumerable own properties from one or more source objects to a target object&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here’s the basic syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;target: The object that will receive the properties.&lt;/li&gt;
&lt;li&gt;sources: One or more source objects whose properties will be copied.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The method returns the modified target object.&lt;/p&gt;

&lt;p&gt;Let’s observe some examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Example: Cloning and Merging&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { a: 1, b: 2, c: 3 }&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, source’s properties are copied into target, and target is returned. Object.assign() is &lt;em&gt;destructive&lt;/em&gt; in the sense that it modifies the first argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Use Case 1: Shallow Cloning&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you need a quick way to clone an object, then &lt;code&gt;Object.assign()&lt;/code&gt; works, but that also depends on if you’re okay with a &lt;strong&gt;shallow&lt;/strong&gt; copy like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nested&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;({},&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nested&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nested&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false (Oops!)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because &lt;code&gt;Object.assign()&lt;/code&gt; only copies &lt;strong&gt;&lt;em&gt;property references&lt;/em&gt;&lt;/strong&gt; for nested objects, changes to nested data in the clone affect the original. For deep cloning, consider &lt;code&gt;structuredClone()&lt;/code&gt; or libraries like &lt;code&gt;Lodash&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Use Case 2: Merging Multiple Objects&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you are merging or combining configurations, settings, or component props, &lt;code&gt;Object.assign()&lt;/code&gt; also will work for you. Consider this example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;defaultSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;finalSettings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;({},&lt;/span&gt; &lt;span class="nx"&gt;defaultSettings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userSettings&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// { theme: 'light', debug: true }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The order matters later parameters override earlier ones. This is great for applying defaults and then overwriting with user-specific values.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Pitfalls and Cons&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Shallow Copying Only&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;As mentioned, nested objects are &lt;em&gt;not&lt;/em&gt; deeply copied. This limitation can cause unintended side effects if you’re not careful. So now you know for next time you encounter this when vibe-coding or otherwise.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Enumerability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Only enumerable properties are copied. That means properties set with &lt;code&gt;Object.defineProperty()&lt;/code&gt; using &lt;code&gt;enumerable: false&lt;/code&gt; won’t be included.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hidden&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;secret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;enumerable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;copy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;({},&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;3. No Prototype Transfer&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Object.assign() does &lt;em&gt;not&lt;/em&gt; copy over an object’s prototype chain. It only deals with own properties.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How &lt;code&gt;Object.assign()&lt;/code&gt; Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Internally, &lt;code&gt;Object.assign()&lt;/code&gt; performs the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Converts target to an object (if it’s not already).&lt;/li&gt;
&lt;li&gt;Iterates over the source objects from left to right.&lt;/li&gt;
&lt;li&gt;For each source:

&lt;ul&gt;
&lt;li&gt;Converts it to an object.&lt;/li&gt;
&lt;li&gt;Loops through its &lt;strong&gt;own enumerable properties&lt;/strong&gt; (both string and symbol keys).&lt;/li&gt;
&lt;li&gt;Copies each property to the target.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Returns the modified target.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This behavior is consistent with the ECMAScript specification and helps developers predict its effects.&lt;/p&gt;

&lt;p&gt;In case this seems too difficult to understand or you simply wish there were simpler alternatives to using &lt;code&gt;Object.assign()&lt;/code&gt;. The answer is that there are. Let’s consider some alternatives.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Alternatives to &lt;code&gt;Object.assign()&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Spread Operator (...)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In many cases, the spread syntax is a cleaner alternative:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;merged&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;defaultSettings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;userSettings&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s more concise and often easier to read, especially when cloning or merging.&lt;/p&gt;

&lt;p&gt;However, the spread operator is syntactic sugar, it’s not identical. Notably, it doesn’t copy symbol properties or getters/setters.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. structuredClone()&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;structuredClone exists for deep cloning. Consider this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deepCopy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;structuredClone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This handles nested structures, dates, arrays, and more. Something &lt;code&gt;Object.assign()&lt;/code&gt; can’t do. So if there are certain copy &lt;code&gt;Object.assign()&lt;/code&gt; cannot handle, when do we use &lt;code&gt;Object.assign()&lt;/code&gt;?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;When to Use Object.assign()&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;Object.assign()&lt;/code&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to merge objects with potential fallback values.&lt;/li&gt;
&lt;li&gt;You’re working in an environment without spread syntax support.&lt;/li&gt;
&lt;li&gt;You need fine control over property copying (e.g., including symbols).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And, Avoid it when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need deep cloning.&lt;/li&gt;
&lt;li&gt;You’re dealing with objects that include non-enumerable or getter/setter properties.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Some Real-World Applications&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In frontend frameworks like React or Vue, &lt;code&gt;Object.assign()&lt;/code&gt; often powers state updates, prop merging, and configuration layering.&lt;/p&gt;

&lt;p&gt;In Node.js though, you’ll find it in utility libraries, plugin loaders, and even Express middleware that combines options.&lt;/p&gt;

&lt;p&gt;It’s ubiquity makes it a tool every JavaScript developer should know inside and out.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Object.assign()&lt;/code&gt; isn’t flashy, but it’s reliable and versatile. Whether you’re merging configs, copying objects, or applying fallbacks, this method gives you precise control over object manipulation, that is if you understand its rules.&lt;/p&gt;

&lt;p&gt;But Mastering &lt;code&gt;Object.assign()&lt;/code&gt; will help you write cleaner, more predictable JavaScript. Just remember that with &lt;strong&gt;great power comes shallow copying&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you enjoyed reading this article, give a like, clap or any reaction.&lt;/p&gt;

&lt;p&gt;If you have questions or additions or comments, Drop a comment, I’d love to hear from you.&lt;/p&gt;

&lt;p&gt;If you want to learn more &lt;strong&gt;uncommon&lt;/strong&gt; JavaScript methods. Check out my other articles. I’m sure you’ll see other contents that interests you.&lt;/p&gt;

&lt;p&gt;Thank you for reading. 🙂&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>programming</category>
      <category>coding</category>
    </item>
    <item>
      <title>TypeScript has a Required Utility Type.</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Sat, 31 May 2025 16:01:08 +0000</pubDate>
      <link>https://forem.com/amtheblessed/typescript-has-a-required-utility-type-452n</link>
      <guid>https://forem.com/amtheblessed/typescript-has-a-required-utility-type-452n</guid>
      <description>&lt;p&gt;TypeScript developers love safety nets. We want guarantees. We want to know that if something &lt;em&gt;should&lt;/em&gt; exist, it &lt;em&gt;must&lt;/em&gt; exist. So, as you might expect, with all things programming, there is an utility type in TypeScript for that.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Required&lt;/code&gt; in TypeScript is a built-in utility type that quietly enforces presence where you don’t want optional properties. It helps to ensure that fields or type that are marked as &lt;code&gt;required&lt;/code&gt; have to be defined.&lt;/p&gt;

&lt;p&gt;Let’s dissect what Required does, how it works, and why it deserves a permanent place in your TypeScript codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is the Required Utility Type?
&lt;/h3&gt;

&lt;p&gt;TypeScript’s &lt;code&gt;Required&lt;/code&gt; is a mapped type that transforms all optional properties of a given type T into required ones. It’s part of TypeScript’s standard library and is defined like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Required&amp;lt;T&amp;gt; = {
  [P in keyof T]-?: T[P];
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In plain English, what this means is that you loop through each property P in type T, and remove the optional modifier ?. The -? syntax specifically &lt;em&gt;removes&lt;/em&gt; optionality. The result is a new type where all properties are now mandatory.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Quick Example
&lt;/h3&gt;

&lt;p&gt;Here’s a practical use case:&lt;/p&gt;

&lt;p&gt;In this first example, name and email are optional,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type User = {
  id: number;
  name?: string;
  email?: string;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type UserIsRequired = Required&amp;lt;User&amp;gt;;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But now that User is marked as Required above, &lt;code&gt;UserIsRequired&lt;/code&gt; now has all properties required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type UserIsRequired = {
  id: number;
  name: string;
  email: string;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No more optional name or email. If you’re consuming an object typed as UserIsRequired, TypeScript will enforce that those fields are present.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Is This Useful?
&lt;/h3&gt;

&lt;p&gt;Think of it this way, optional fields are a double-edged sword. They’re helpful when you’re dealing with partial data, but they can turn into bugs if you assume those fields are always present later in the pipeline, and this can later come back to bite you.&lt;/p&gt;

&lt;p&gt;Consider a user registration form:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function submitForm(user: User) {
  sendToServer(user.name.toUpperCase()); // name is undefined here
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You either use non-null assertions (user.name!) and hope for the best, or check every field. But what if you &lt;em&gt;know&lt;/em&gt; this function should only ever receive complete user data? That’s where &lt;code&gt;Required&amp;lt;User&amp;gt;&lt;/code&gt; saves you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function submitForm(user: Required&amp;lt;User&amp;gt;) {
  sendToServer(user.name.toUpperCase()); // name is now a guaranteed string
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes your codebase safer and your intent clearer.&lt;/p&gt;

&lt;h3&gt;
  
  
  So, Where Should You Use It?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  1. Validation Layers
&lt;/h3&gt;

&lt;p&gt;After validating incoming data, you might want to treat it as fully defined. Here is an example of what I mean by this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function validate(user: User): Required&amp;lt;User&amp;gt; {
  if (!user.name || !user.email) throw new Error("Missing fields");
  return user as Required&amp;lt;User&amp;gt;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Default Merging Utilities
&lt;/h3&gt;

&lt;p&gt;When combining defaults with user input. Here’s an example of this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function withDefaults(user: User): Required&amp;lt;User&amp;gt; {
  return {
    id: user.id,
    name: user.name ?? 'Anonymous',
    email: user.email ?? 'no-reply@example.com',
  };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the return type explicitly communicates completeness.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Testing &amp;amp; Mock Data
&lt;/h3&gt;

&lt;p&gt;When creating test data before integrating with served data from a server or an external API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const mockUser: Required&amp;lt;User&amp;gt; = {
  id: 1,
  name: "Alice",
  email: "alice@example.com"
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No half-baked objects will slip through this way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limitations of Required
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It’s Shallow&lt;/strong&gt;: Required only makes top-level properties required. Nested objects with optional fields won’t be affected unless you apply Required recursively.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Config = {
  meta?: {
    created?: string;
  };
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type FullyRequired = Required&amp;lt;Config&amp;gt;;

// meta is required, but meta.created is still optional
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Type Assertions Are on You&lt;/strong&gt;: If you claim something is Required, make sure it truly is. TypeScript trusts you once you assert it. &lt;em&gt;This can also come back to bite you. So, it’s good to have a sense of this constraint when using Required.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;TypeScript’s Required utility type is a small but powerful feature that enforces intent and safeguards your logic. It’s your ally in a world full of partials and maybes. You should use it to tighten up your types, document your expectations, and write safer, cleaner code.&lt;/p&gt;

&lt;p&gt;In short, &lt;code&gt;Required&amp;lt;T&amp;gt;&lt;/code&gt; isn’t just syntactic sugar in your code, it is a contract. And in software, clear contracts are pure gold.&lt;/p&gt;

&lt;h3&gt;
  
  
  Did you Learn Something?
&lt;/h3&gt;

&lt;p&gt;If you like this article, give it a reaction.&lt;/p&gt;

&lt;p&gt;If you have a question or an opinion or controversy, drop a comment.&lt;/p&gt;

&lt;p&gt;If you want to read about other programming tips. Check out my other articles. You will definitely learn something new from there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading. 🙂&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>programming</category>
      <category>javascript</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>NPM vs Yarn vs PNPM: Why so many?</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Thu, 29 May 2025 23:51:28 +0000</pubDate>
      <link>https://forem.com/amtheblessed/npm-vs-yarn-vs-pnpm-why-so-many-520e</link>
      <guid>https://forem.com/amtheblessed/npm-vs-yarn-vs-pnpm-why-so-many-520e</guid>
      <description>&lt;p&gt;If you are a JavaScript developer, chances are you have a favourite package manager from the number of choices that exist. NPM, Yarn, and PNPM all package managers that aim to do the same job:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manage project dependencies. But they do it in different ways, each with its own tradeoffs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article, I’ll break down how these package managers work, what makes each one great (especially why we as devs say this one is better than this), and which is the smartest choice for modern development in 2025.&lt;/p&gt;

&lt;p&gt;If you’re ready to find out. Then keep reading.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core of the Problem: Managing Node Modules
&lt;/h3&gt;

&lt;p&gt;Every package manager for JavaScript solves the same core issue: downloading dependencies from the npm registry and making sure they play nicely together in a project. This may sound like a simple thing to do, but the Node.js ecosystem is notorious for deep, bloated node_modules trees, long install times, and version conflicts. That’s where these tools start to differentiate.&lt;/p&gt;

&lt;h3&gt;
  
  
  NPM: The Original, the Default, the Standard
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;First released:&lt;/strong&gt; 2010&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current version:&lt;/strong&gt; 10.x (as of 2025)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bundled with:&lt;/strong&gt; Node.js&lt;/p&gt;

&lt;p&gt;NPM is the OG. It comes preinstalled with Node.js and is still the most widely used package manager by raw numbers. Over the years, NPM has improved significantly with better caching, package-lock.json for consistent installs, and support for workspaces. But it has a major problem of being slow for larger projects and less effective when it comes to managing disk usage. For clarity, let’s consider some of the Pros and Cons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is ubiquitous and universally supported&lt;/li&gt;
&lt;li&gt;It is simpler onboarding for beginners&lt;/li&gt;
&lt;li&gt;npm audit and security tools built-in&lt;/li&gt;
&lt;li&gt;It has a large ecosystem and strong community&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is slower than Yarn and PNPM in larger projects&lt;/li&gt;
&lt;li&gt;It is less efficient disk usage compared to PNPM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ideal for:&lt;/strong&gt; Beginners, simple projects, and teams who want zero setup beyond Node.js&lt;/p&gt;

&lt;h3&gt;
  
  
  Yarn: Speed, Determinism, and Better UX
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;First released:&lt;/strong&gt; 2016 by Facebook&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current version:&lt;/strong&gt; Yarn 4 (Berry)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Before talking about Yarn, I’m just impressed with how Facebook has really given us developers some interesting tools and frameworks, and we are grateful for it. Let’s talk about yarn though.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Yarn came onto the scene promising faster installs and better determinism. It was the first to introduce lockfiles (yarn.lock) and offline caching. With Yarn 2 and later (Berry), the project became far more opinionated. Yarn now uses a plugin-based architecture, strict PnP (Plug-n-Play) resolution by default (no &lt;code&gt;node_modules!&lt;/code&gt;), and its own configuration style.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has fast install times, especially with PnP&lt;/li&gt;
&lt;li&gt;It supports Deterministic builds&lt;/li&gt;
&lt;li&gt;It has great monorepo support with workspaces&lt;/li&gt;
&lt;li&gt;It supports Plug-in architecture for customization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has a steep learning curve post the first version of Yarn. &lt;em&gt;(This might not be a problem for most people reading this though, but I just had to add it here.)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;It requires config/setup to work with many tools&lt;/li&gt;
&lt;li&gt;There are known compatibility issues with some legacy packages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ideal for:&lt;/strong&gt; Large-scale projects, monorepos, advanced developers who want control.&lt;/p&gt;

&lt;h3&gt;
  
  
  PNPM: Speed + Storage Efficiency = Game Changer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;First released:&lt;/strong&gt; 2016 by Zoltan Kochan&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current version:&lt;/strong&gt; 9.x (as of 2025)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm&lt;/code&gt;is my current package manager and I can say it is what I write in this article.&lt;/p&gt;

&lt;p&gt;PNPM solves one of the biggest inefficiencies in Node.js, the issue of duplication. Instead of copying dependencies into each project, PNPM uses a global content-addressable store. Dependencies are linked using hard links and symlinks, dramatically reducing disk space usage. You might wonder why this took long to implement? I asked myself the same question too.&lt;/p&gt;

&lt;p&gt;Another interesting thing about &lt;code&gt;pnpm&lt;/code&gt; is that &lt;strong&gt;it enforces strict dependency rules by default&lt;/strong&gt;, preventing packages from accessing dependencies they haven’t declared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blazing fast installs&lt;/li&gt;
&lt;li&gt;Minimal disk usage&lt;/li&gt;
&lt;li&gt;Strict and safe dependency resolution&lt;/li&gt;
&lt;li&gt;First-class workspace and monorepo support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller ecosystem than Yarn and NPM&lt;/li&gt;
&lt;li&gt;Still not the default in most tooling&lt;/li&gt;
&lt;li&gt;Some older tools assume traditional node_modules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ideal for:&lt;/strong&gt; Power users, large projects, teams managing multiple apps or libraries&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-World Performance Benchmarks
&lt;/h3&gt;

&lt;p&gt;Across various open-source benchmarks and internal reports from dev teams in 2024–2025, the numbers speak for themselves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcreyq9m41wb1txp9d1gu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcreyq9m41wb1txp9d1gu.png" alt="Performance Benchmarks between npm, yarn and pnpm" width="778" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While actual numbers vary by project, PNPM consistently comes out ahead on speed and space. Yarn trails closely, especially with PnP mode enabled. NPM lags, though it’s caught up a lot in recent years.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Preferences in 2025
&lt;/h3&gt;

&lt;p&gt;Surveys and GitHub trends show that PNPM has surged in popularity over the past two years. While NPM still dominates due to default usage with Node.js, many mid-size to large teams are switching to PNPM for better performance and stricter dependency isolation.&lt;/p&gt;

&lt;p&gt;Yarn remains strong in enterprise settings and monorepos, but its PnP system and complexity can turn off devs who want simplicity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;According to an Excerpt from StackOverflow Developer Survey 2025:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NPM has 55% popularity&lt;/li&gt;
&lt;li&gt;PNPM has 32% popularity&lt;/li&gt;
&lt;li&gt;Yarn has 22% popularity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  So, Which One Should You Use?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Use NPM if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want simplicity and compatibility&lt;/li&gt;
&lt;li&gt;You’re working on small projects or teaching beginners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Yarn if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need advanced workspace features and plug-in extensibility&lt;/li&gt;
&lt;li&gt;You’re okay with its PnP approach and willing to configure around it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use PNPM if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want raw speed and disk efficiency&lt;/li&gt;
&lt;li&gt;You’re working in monorepos or CI-heavy environments&lt;/li&gt;
&lt;li&gt;You care about strict, safe dependency boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In 2025, &lt;strong&gt;PNPM is the best all-around choice&lt;/strong&gt; for most developers. It’s fast, efficient, and increasingly well-supported across the ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And I’ll end with this&lt;/em&gt;&lt;em&gt;, unless you’re tied to NPM or need Yarn’s specific features, PNPM deserves your serious consideration.&lt;/em&gt;**&lt;/p&gt;

&lt;h3&gt;
  
  
  Enjoyed This Article?
&lt;/h3&gt;

&lt;p&gt;Then share it with your dev team or community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you have questions or contributions,&lt;/strong&gt; Leave a comment or reach out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow me&lt;/strong&gt; for more clear, developer-first tutorials, with real-world examples and sharp insights.&lt;/p&gt;

&lt;p&gt;Thanks for reading and happy coding. 🙂&lt;/p&gt;

</description>
      <category>npm</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is Pick in TypeScript? Do you know? 🤔</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Wed, 28 May 2025 18:36:47 +0000</pubDate>
      <link>https://forem.com/amtheblessed/what-is-pick-in-typescript-do-you-know-496f</link>
      <guid>https://forem.com/amtheblessed/what-is-pick-in-typescript-do-you-know-496f</guid>
      <description>&lt;p&gt;When you’re building modern web applications in TypeScript, one of your goals should be writing safe, scalable, and maintainable code. A big part of that is mastering TypeScript’s utility types. One of the most useful and often misunderstood is &lt;strong&gt;&lt;code&gt;Pick&lt;/code&gt;&lt;/strong&gt;. If you’re new to TypeScript or just haven’t tapped into the full power of its type utilities yet or even if this is the first time you hear about this, don’t worry. You can learn all about &lt;code&gt;Pick&lt;/code&gt; in just few minutes. So, Let’s break it all down, starting from the basics.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Pick in TypeScript?
&lt;/h3&gt;

&lt;p&gt;Pick is a &lt;strong&gt;built-in TypeScript utility type&lt;/strong&gt;. It lets you create a new type by selecting a subset of properties from an existing type. &lt;em&gt;(If you want to learn about more utility-types in TypeScript such as Partial, Omit, I have article written about this as well. You’ll find them at the end of this article.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here’s the syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pick&amp;lt;Type, Keys&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let me explain what these mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; The existing object type you want to base your new type on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keys:&lt;/strong&gt; A union of the keys you want to extract.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A Simple Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type User = {
  id: number;
  name: string;
  email: string;
  isAdmin: boolean;
};

type PublicProfile = Pick&amp;lt;User, 'id' | 'name'&amp;gt;;

const profile: PublicProfile = {
  id: 1,
  name: 'Alice'
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;PublicProfile&lt;/code&gt; is now a type that includes only the id and name properties from User. &lt;em&gt;You pick just what you need. It’s as the name implies.&lt;/em&gt; This is cleaner and safer than redefining the type manually everytime you need a different type or a different interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Use Pick ?
&lt;/h3&gt;

&lt;p&gt;Let’s talk some practical benefits:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Avoid Code Duplication
&lt;/h3&gt;

&lt;p&gt;You don’t need to retype property definitions. I see people do this a lot in their codebase. I also used to do this before I came across these utility types. But since I found them, my TypeScript codebase has significantly improved in quality. And this has helped reduced a lot of maintenance headaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Improve Type Safety
&lt;/h3&gt;

&lt;p&gt;By referencing the original type or Shape, Pick ensures consistency even if the base type changes. You might not understand this until you start using this utility type. The consistency is golden.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Enable Reusable Components
&lt;/h3&gt;

&lt;p&gt;It’s perfect for reusable components. Say, you need a component that only needs part of a type? Pick lets you craft precise props.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Clear Intent
&lt;/h3&gt;

&lt;p&gt;When you use Pick, you’re making it clear to other developers that your new type is a slice of something larger. It’s semantic and very readable.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Use Pick Dynamically
&lt;/h3&gt;

&lt;p&gt;You can combine Pick with other utilities to build powerful abstractions. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type KeysToPick = 'email' | 'isAdmin';
type AdminContact = Pick&amp;lt;User, KeysToPick&amp;gt;;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can even dynamically generate keys with mapped types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const keys = ['email', 'isAdmin'] as const;
type KeysArray = typeof keys[number];
type AdminContact = Pick&amp;lt;User, KeysArray&amp;gt;;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is super useful when you’re working with dynamic forms or APIs that need flexible shapes. &lt;strong&gt;Please mark this point for your reference.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Let’s go over the Best Practices once more.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  1. Use Pick to Build Read-Only Interfaces for UI Components
&lt;/h3&gt;

&lt;p&gt;Keep frontend props tight and clean by sending only what a component needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Combine with Omit for Precision
&lt;/h3&gt;

&lt;p&gt;Sometimes you need both. If you need to read about omit. &lt;a href="https://medium.com/@mayowaobisesan/understanding-omit-in-typescript-a-beginner-friendly-deep-dive-fafdb93762d2" rel="noopener noreferrer"&gt;&lt;strong&gt;Click here to read my article about omit.&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type NonSensitiveUser = Omit&amp;lt;User, 'email' | 'isAdmin'&amp;gt;;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Use Named Utility Types
&lt;/h3&gt;

&lt;p&gt;Instead of inlining Pick, give it a name like PublicProfile. It improves readability and reusability. Just the like the example I showed above.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Pair with &lt;code&gt;keyof&lt;/code&gt; to Create Dynamic Helpers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function pluck&amp;lt;T, K extends keyof T&amp;gt;(obj: T, keys: K[]): Pick&amp;lt;T, K&amp;gt; {
  const result = {} as Pick&amp;lt;T, K&amp;gt;;
  keys.forEach((key) =&amp;gt; {
    result[key] = obj[key];
  });
  return result;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can extract exactly what you need from an object while preserving types.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visualizing Pick
&lt;/h3&gt;

&lt;p&gt;Here’s a simple visualization to clarify how Pick narrows down an object type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Original Type:          Picked Type:
-------------------     -------------------
id: number              id: number
name: string    ===&amp;gt;    name: string
email: string
isAdmin: boolean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Pick might seem simple at first glance, but it’s a powerhouse once you understand how to use it effectively. From keeping your code DRY and safe, to enabling flexible, type-safe APIs, it’s a must-have in your TypeScript toolkit. If you’re serious about scaling your TypeScript applications with confidence, clarity and quality, I believe mastering Pick is a step you can’t skip in your journey.&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;DR of this Article:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pick in TypeScript is a utility type used to select specific properties from an object type.&lt;/li&gt;
&lt;li&gt;It helps reduce code duplication and enhances type safety.&lt;/li&gt;
&lt;li&gt;Use Pick with other utilities like Omit and keyof for more powerful patterns.&lt;/li&gt;
&lt;li&gt;Ideal for API models, UI components, and anywhere precise type shaping is needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pick what works best for you from these for your next TypeScript project, or maybe even for your existing project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enjoyed This Article?
&lt;/h3&gt;

&lt;p&gt;If this article helped your understanding of &lt;code&gt;Pick&lt;/code&gt;, share it with your dev team or TypeScript community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you have questions or want deeper dives into other utility types?&lt;/strong&gt; Leave a comment or reach out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow me&lt;/strong&gt; for more clear, developer-first TypeScript tutorials, with real-world examples and sharp insights.&lt;/p&gt;

&lt;p&gt;Thanks for reading and happy typing. 🙂&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>programming</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Microsoft "Edit" vs Vim: Is Vim dethroned?</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Wed, 28 May 2025 00:54:28 +0000</pubDate>
      <link>https://forem.com/amtheblessed/microsoft-edit-vs-vim-is-vim-dethroned-1i40</link>
      <guid>https://forem.com/amtheblessed/microsoft-edit-vs-vim-is-vim-dethroned-1i40</guid>
      <description>&lt;p&gt;Over the years, Microsoft has made a significant shift in contributing heavily to the open-source world. From the development and release of TypeScript to VSCode, to contributing and working actively on other open-source projects such as Rust, React, and other major open-source tools that have made life easy for developers. Microsoft has really made a name for itself in this open-source game. And Microsoft has added yet another new open-source project to their already impressive arsenal of open-source tools. This new open-source project is called “Edit”, and it is an interesting project. Let’s talk about it.&lt;/p&gt;

&lt;p&gt;Let me begin with this power quote: &lt;strong&gt;Microsoft is officially entering the command-line editor space with “Edit” a modern, open-source alternative to Vim designed for power users, developers, and sysadmins who live in the terminal.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While “Edit” might sound like just another text editor in a crowded market, it marks a significant shift, especially for Windows developers who’ve long relied on outdated Notepad variants or bolted-on Unix tools.&lt;/p&gt;

&lt;p&gt;So enough of the introduction, what is Edit? And why is Microsoft building it now?&lt;/p&gt;

&lt;h3&gt;
  
  
  A Fresh Take on a Legacy Problem
&lt;/h3&gt;

&lt;p&gt;For over 30 years, &lt;strong&gt;&lt;code&gt;Vim&lt;/code&gt;&lt;/strong&gt; has been the undisputed king of terminal text editors. Its interface, performance, and very deep configurability made it a favorite among Unix users. But it’s also infamous for its steep learning curve and “byzantine” keybindings. For many Windows users, Vim is more of a survival tool than a preference. And this is exactly what &lt;strong&gt;Microsoft’s Edit aims to fix.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“Edit” is Built in Rust, designed with performance and usability in mind, Edit is engineered to be fast, predictable, and easy to extend. It’s terminal-native but not hostile to newcomers. Think: Vim’s muscle, without the arcane rituals.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fun fact,&lt;/p&gt;

&lt;p&gt;“Edit” was written in 3 languages before finally settling for Rust. Rust was not the first choice for “Edit”. Zig was a preferred choice, but due to incompatibility issues with Windows, “Edit” was re-written in Rust.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Key Features of Microsoft Edit
&lt;/h3&gt;

&lt;p&gt;Here’s what sets Edit apart:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust-Based Core&lt;/strong&gt;: Edit is written in Rust, giving it modern performance characteristics, memory safety, and cross-platform potential out of the box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modal Editing (Yes, Like Vim)&lt;/strong&gt;: Edit supports modal editing but is designed to be more intuitive. Think of it as “Vim-lite” with better defaults.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurable Without the Pain&lt;/strong&gt;: I think most people will like this. The Settings and keybindings live in clean, readable config files. You won’t need to memorize Vimscript to tweak your workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First-Class Windows Support&lt;/strong&gt;: Unlike Vim and its cousins, Edit is designed to feel native on Windows. No WSL workarounds, no Cygwin, no compromise. But not just windows. You can use it with other unix-based operating systems like MacOS and Linux.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal-First, But GUI-Ready&lt;/strong&gt;: Edit runs in your terminal, but the project roadmap includes optional GUI shells for a hybrid experience, similar to Neovim + frontends like Oni or Helix.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Now? Why Windows?
&lt;/h3&gt;

&lt;p&gt;Let’s be honest: text editing on Windows has been a mixed bag. Notepad is too barebones. VS Code is excellent but heavy. Powershell and CMD have improved, but neither is developer-first in the way Unix shells are. Until recently, terminal editing on Windows was a second-class experience.&lt;/p&gt;

&lt;p&gt;But now, with the rise of &lt;strong&gt;Windows Terminal&lt;/strong&gt;, &lt;strong&gt;WSL2&lt;/strong&gt;, and a growing Rust ecosystem, Microsoft has the pieces to offer something leaner and meaner for developers who live in CLI environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Edit” is the missing puzzle piece.&lt;/strong&gt; It gives Windows power users a native, high-performance editor that respects their workflows, doesn’t force them into Linux metaphors, and still plays nice with Git, SSH, and scripting pipelines. Yes it plays nice with SSH. Interesting right?&lt;/p&gt;

&lt;h3&gt;
  
  
  For Vim Veterans: Should You Switch?
&lt;/h3&gt;

&lt;p&gt;If you’re a Vim user, you might be skeptical. Vim is mature, fast, and everywhere. Should you switch?&lt;/p&gt;

&lt;p&gt;Here’s a breakdown:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c2r8lr8ixa5lctf41q0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c2r8lr8ixa5lctf41q0.png" alt="Feature difference between Vim and Microsoft Edit" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s clear is that Edit isn’t trying to replace Vim wholesale.&lt;/strong&gt; Instead, it’s positioning itself as a practical, modern option for users who want the power of modal editing without the historical baggage.&lt;/p&gt;

&lt;p&gt;For Vim experts, Edit could be a “daily driver” alternative in environments where Vim feels clunky or outdated — especially on Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  For Windows Developers: A Game-Changer
&lt;/h3&gt;

&lt;p&gt;This is where Edit could really shine. On Windows, terminal-based editing has long been an afterthought. With Edit, Microsoft is saying: &lt;strong&gt;&lt;em&gt;you don’t need to live in VS Code to be productive&lt;/em&gt;&lt;/strong&gt;. You can stay in the terminal, script, build, git, and edit all without leaving your flow.&lt;/p&gt;

&lt;p&gt;For devs using &lt;strong&gt;Windows Terminal&lt;/strong&gt;, &lt;strong&gt;Powershell&lt;/strong&gt;, or &lt;strong&gt;WSL2&lt;/strong&gt;, Edit fits right in. No more context-switching between editors. No more crutches like nano or Notepad++. Just a native, fast, keyboard-first tool that gets out of your way. &lt;em&gt;(Even though I like nano, this is better).&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bigger Picture: Microsoft Loves the Terminal Again
&lt;/h3&gt;

&lt;p&gt;Edit is the latest sign of Microsoft’s ongoing love affair with developers and open source. From VS Code to the new Windows Terminal to full Linux kernel support in WSL2, the company is rethinking what productivity means for modern devs.&lt;/p&gt;

&lt;p&gt;By releasing Edit as open source, Microsoft is betting on community-driven development. And by making it modular, scriptable, and terminal-native, they’re not just copying Vim they’re reimagining it for a new generation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Edit isn’t just a new text editor, it’s a statement.&lt;/strong&gt; It tells developers, especially on Windows: &lt;strong&gt;&lt;em&gt;We see you. We get how you work. And we’re building tools that respect that.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And if you think about this, this was the same thing Microsoft did with TypeScript and with VSCode. I truly believe in “Edit”. This Microsoft philosophy to understand what devs need in the past carved a place for itself and totally changed the tech world. I believe “Edit” could do the same also.&lt;/p&gt;

&lt;p&gt;For Vim users though, Edit may not replace your beloved .vimrc overnight. But it’s worth watching and trying. Especially if you live in the Windows ecosystem and crave a native, powerful alternative that doesn’t come with a legacy learning curve.&lt;/p&gt;

&lt;p&gt;As Edit evolves, it could become the bridge between the raw power of Vim and the modern UX of tools like Helix or VS Code. It might just be the best of both worlds. I’m very optimistic and eager to see where this goes.&lt;/p&gt;

&lt;p&gt;If you like this article, give it a reaction.&lt;/p&gt;

&lt;p&gt;If you have a question or an opinion or controversy, drop a comment.&lt;/p&gt;

&lt;p&gt;If you want to read about other programming tips. Check out my other article. You will definitely learn something new from there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading. 🙂&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>rust</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Mastering TypeScript’s Omit—Beginner to Advanced (With Visuals)</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Fri, 23 May 2025 01:15:02 +0000</pubDate>
      <link>https://forem.com/amtheblessed/mastering-typescripts-omit-beginner-to-advanced-with-visuals-332</link>
      <guid>https://forem.com/amtheblessed/mastering-typescripts-omit-beginner-to-advanced-with-visuals-332</guid>
      <description>&lt;p&gt;If you're tired of repeating types just to exclude a few fields? Omit  is your best friend for handling this.&lt;/p&gt;

&lt;p&gt;I wrote a breakdown of TypeScript’s Omit for anyone who wants to clean up their types, avoid duplication, and stay DRY. This article ramps up from beginner basics to best practices with real code and visuals to help it stick.&lt;/p&gt;

&lt;p&gt;In this article, I walk through:&lt;br&gt;
    • What Omit is (in plain English)&lt;br&gt;
    • Practical use cases for APIs &amp;amp; UI&lt;br&gt;
    • Common mistakes to avoid&lt;br&gt;
    • Code examples &amp;amp; diagrams&lt;/p&gt;

&lt;p&gt;Read it here → &lt;a href="https://mayowaobisesan.medium.com/understanding-omit-in-typescript-a-beginner-friendly-deep-dive-fafdb93762d2&amp;lt;br&amp;gt;%0ALet%E2%80%99s%20discuss%20in%20the%20comments!" rel="noopener noreferrer"&gt;Understand Omit in TypeScript: Beginner-friendly Deep Dive&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  typescript #webdev #beginners #cleanCode #javascript
&lt;/h1&gt;

</description>
      <category>programming</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>TypeScript Tip: When, Why and How to Use Partial&lt;T&gt;</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Mon, 19 May 2025 08:13:05 +0000</pubDate>
      <link>https://forem.com/amtheblessed/typescript-tip-when-why-and-how-to-use-partial-3g70</link>
      <guid>https://forem.com/amtheblessed/typescript-tip-when-why-and-how-to-use-partial-3g70</guid>
      <description>&lt;p&gt;If you’re working with TypeScript and find yourself updating forms or doing partial API requests, you need to understand Partial.&lt;/p&gt;

&lt;p&gt;I wrote a deep but beginner-friendly article explaining:&lt;br&gt;
    • What Partial really does under the hood&lt;br&gt;
    • When it shines (and when it doesn’t)&lt;br&gt;
    • How to use DeepPartial for nested objects&lt;br&gt;
    • Code samples, visuals, and a cheat sheet&lt;/p&gt;

&lt;p&gt;👉 [Read the full article on Medium] &lt;a href="https://mayowaobisesan.medium.com/understanding-partials-in-typescript-what-why-and-how-4ec697d09693" rel="noopener noreferrer"&gt;https://mayowaobisesan.medium.com/understanding-partials-in-typescript-what-why-and-how-4ec697d09693&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>typescript</category>
    </item>
    <item>
      <title>STELLAR BLOCKCHAIN -YOUTUBE TUTORIAL PLAYLIST</title>
      <dc:creator>Mayowa Obisesan</dc:creator>
      <pubDate>Sun, 18 Aug 2024 23:23:09 +0000</pubDate>
      <link>https://forem.com/amtheblessed/stellar-blockchain-network-tutorial-series-1ckg</link>
      <guid>https://forem.com/amtheblessed/stellar-blockchain-network-tutorial-series-1ckg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/stellar"&gt;Build Better on Stellar: Smart Contract Challenge&lt;/a&gt;: Create a Tutorial&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Tutorial
&lt;/h2&gt;

&lt;p&gt;Here is the tutorial I created about the Stellar blockchain.&lt;br&gt;
&lt;a href="https://www.youtube.com/playlist?list=PLN5GhKniaYnoWOUt6q0Wr6flZvXbf7Lk9" rel="noopener noreferrer"&gt;Stellar Blockchain Network Tutorial Series&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PLN5GhKniaYnoWOUt6q0Wr6flZvXbf7Lk9" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ytimg.com%2Fvi%2FphDOS8-fCu4%2Fhqdefault.jpg%3Fsqp%3D-oaymwEXCOADEI4CSFryq4qpAwkIARUAAIhCGAE%3D%26rs%3DAOn4CLD_nK_2RwwERuK2d_hcqJgUP8psgg%26days_since_epoch%3D20149" height="270" class="m-0" width="480"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/playlist?list=PLN5GhKniaYnoWOUt6q0Wr6flZvXbf7Lk9" rel="noopener noreferrer" class="c-link"&gt;
          Stellar Blockchain Series - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Welcome to the Stellar Blockchain series. This series aims to help onboard developers to the stellar blockchain and into web3 in general by providing the nee...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.youtube.com%2Fs%2Fdesktop%2Ff72bfc7f%2Fimg%2Flogos%2Ffavicon.ico" width="800" height="400"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  What I Created
&lt;/h2&gt;

&lt;p&gt;I created a playlist about the stellar blockchain network. Starting from the basics of Stellar network.&lt;/p&gt;

&lt;p&gt;I created a playlist that delves into the Stellar blockchain network, beginning with the fundamentals of the Stellar network. The playlist is designed to provide a comprehensive understanding of Stellar's infrastructure, starting from its basic principles and gradually advancing to intermediate and then to more complex concepts. The playlist currently contains 8 uploaded videos of about 3 hours. It's an ideal starting point for anyone looking to grasp the essentials of the Stellar blockchain and its capabilities.&lt;/p&gt;

&lt;p&gt;My submission is to help make the stellar blockchain as understandable as possible. Providing references to real-life scenarios, other blockchains and diagrams to make the concepts about Stellar network as understandable as possible. The videos I created and have compiled into a playlist follows a progression so that whoever watches the video will have a good and deep knowledge of what the stellar blockchain network is all about. The videos build on themselves similar to how Stellar ledgers build on themselves. I also ensure that major points I discussed during the videos are properly shown and where applicable explained with diagrams. These videos will support developers who need better understanding about the Stellar blockchain and for developers who want to build Dapps on Stellar. From the videos, you learn about the rules that govern the Stellar blockchain, what Stellar blockchain is best equipped for, how smart contracts work on Stellar blockchain, from the conversion of Soroban contracts to WASM to deployment on the blockchain, you will learn about all of this and more from this compiled playlist about Stellar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;The motivation behind creating the videos was when I was going through the docs. Though the docs were explanatory enough to understand, because I have good knowledge about the blockchain and various other blockchains and because I also teach in physical location about blockchain and web3, I thought of changing my approach to teaching about blockchain by making videos to share my knowledge about what I am currently learning about Stellar blockchain. This month of August is my first time exploring the Stellar blockchain and since I found Stellar interesting and that I found it's features much appealing. I thought of sharing my knowledge about the Stellar blockchain in moving pictures and not just through physically classes as I would normally do.&lt;/p&gt;

&lt;p&gt;I would like to credit my friend that told me about this hackathon about Stellar blockchain. She picked my interest about Stellar and got me interested in learning and exploring Stellar. Though she couldn't complete the hackathon and make her submission. I am crediting her in this post.&lt;br&gt;
Faith Roberts: &lt;a class="mentioned-user" href="https://dev.to/faytey7"&gt;@faytey7&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;br&gt;
Kudos to the SDF (Stellar Development Foundation), they are doing a good job.&lt;br&gt;
Kudos to the Stellar Community. I'm happy to be a part of that community now.&lt;/p&gt;

&lt;p&gt;Thank you for reading.&lt;br&gt;
Happy hacking everyone. 🙂&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>stellarchallenge</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
