<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Srashti Gupta</title>
    <description>The latest articles on DEV Community by Srashti Gupta (@srashtigupta).</description>
    <link>https://dev.to/srashtigupta</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%2F2879088%2F1a1681a4-bb10-43c2-bcf7-3f31eb49a6f0.jpg</url>
      <title>DEV Community: Srashti Gupta</title>
      <link>https://dev.to/srashtigupta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/srashtigupta"/>
    <language>en</language>
    <item>
      <title>Observability vs Monitoring: What Every Developer Must Know</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Thu, 19 Feb 2026 11:11:28 +0000</pubDate>
      <link>https://dev.to/srashtigupta/observability-vs-monitoring-what-every-developer-must-know-42lg</link>
      <guid>https://dev.to/srashtigupta/observability-vs-monitoring-what-every-developer-must-know-42lg</guid>
      <description>&lt;h2&gt;
  
  
  Observability Explained for Backend Engineers
&lt;/h2&gt;

&lt;p&gt;Modern systems are no longer single applications running on one server.&lt;br&gt;
They are distributed, containerized, and highly dynamic.&lt;/p&gt;

&lt;p&gt;When something breaks in production, how do we find the root cause?&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;observability&lt;/strong&gt; comes in.&lt;/p&gt;


&lt;h2&gt;
  
  
  What is Observability?
&lt;/h2&gt;

&lt;p&gt;Observability is the ability to understand the internal state of a system by analyzing its outputs.&lt;/p&gt;

&lt;p&gt;In simple words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we detect, debug, and fix production issues without logging into the server?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If yes — your system is observable.&lt;/p&gt;


&lt;h2&gt;
  
  
  🏗 The Three Pillars of Observability
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Metrics
&lt;/h3&gt;

&lt;p&gt;Metrics are numerical values over time.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;Memory usage&lt;/li&gt;
&lt;li&gt;Request per second&lt;/li&gt;
&lt;li&gt;Error rate&lt;/li&gt;
&lt;li&gt;Latency (p95, p99)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Common tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prometheus&lt;/li&gt;
&lt;li&gt;Datadog&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Logs
&lt;/h3&gt;

&lt;p&gt;Logs are event-based records that provide detailed information.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Payment failed due to database timeout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Popular stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Elasticsearch&lt;/li&gt;
&lt;li&gt;Logstash&lt;/li&gt;
&lt;li&gt;Kibana&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Also known as ELK stack)&lt;/p&gt;




&lt;h3&gt;
  
  
  Traces
&lt;/h3&gt;

&lt;p&gt;Traces track a single request across multiple services.&lt;/p&gt;

&lt;p&gt;Example request flow:&lt;/p&gt;

&lt;p&gt;User → API Gateway → Auth Service → Payment Service → Database → Response&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jaeger&lt;/li&gt;
&lt;li&gt;Zipkin&lt;/li&gt;
&lt;li&gt;OpenTelemetry&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🖼 Observability Architecture
&lt;/h2&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%2Fopenobserve.ai%2Fassets%2Fmicroservices_observability_component_diagram_d11c18eb94.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%2Fopenobserve.ai%2Fassets%2Fmicroservices_observability_component_diagram_d11c18eb94.png" alt="Image" width="800" height="566"&gt;&lt;/a&gt;&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%2Fek8ewribjbupuntifvhp.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%2Fek8ewribjbupuntifvhp.png" alt="Image" width="484" height="373"&gt;&lt;/a&gt;&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%2Fkpoh0n08bcd42mpyhz3f.webp" 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%2Fkpoh0n08bcd42mpyhz3f.webp" alt="Image" width="800" height="463"&gt;&lt;/a&gt;&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%2Fa1j3gxz6ohh4k4i5yupt.webp" 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%2Fa1j3gxz6ohh4k4i5yupt.webp" alt="Image" width="695" height="424"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚖ Observability vs Monitoring
&lt;/h2&gt;

&lt;p&gt;Monitoring answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Is the system healthy?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Observability answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Why is the system unhealthy?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Monitoring = Known issues&lt;br&gt;
Observability = Unknown issues&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Observability Matters in High-Traffic Systems
&lt;/h2&gt;

&lt;p&gt;Imagine your system traffic increases 10×.&lt;/p&gt;

&lt;p&gt;Suddenly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latency increases&lt;/li&gt;
&lt;li&gt;Error rate spikes&lt;/li&gt;
&lt;li&gt;Users complain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without observability:&lt;br&gt;
You guess.&lt;/p&gt;

&lt;p&gt;With observability:&lt;br&gt;
You know.&lt;/p&gt;

&lt;p&gt;You can check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU saturation&lt;/li&gt;
&lt;li&gt;Database latency&lt;/li&gt;
&lt;li&gt;Cache hit ratio&lt;/li&gt;
&lt;li&gt;External API failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces Mean Time To Recovery (MTTR).&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced Concepts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SLI (Service Level Indicator)&lt;/li&gt;
&lt;li&gt;SLO (Service Level Objective)&lt;/li&gt;
&lt;li&gt;Error Budget&lt;/li&gt;
&lt;li&gt;Structured Logging&lt;/li&gt;
&lt;li&gt;Correlation IDs&lt;/li&gt;
&lt;li&gt;Distributed Context Propagation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Observability is no longer optional.&lt;/p&gt;

&lt;p&gt;In modern microservices and cloud-native systems, it is essential.&lt;/p&gt;

&lt;p&gt;If you are building scalable backend systems, observability should be part of your design — not an afterthought.&lt;/p&gt;




</description>
      <category>observability</category>
      <category>microservices</category>
      <category>backend</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>WHY we use Mapped Types &amp;Conditional Types in TS?</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Sun, 14 Dec 2025 09:54:47 +0000</pubDate>
      <link>https://dev.to/srashtigupta/why-we-use-mapped-types-conditional-types-in-ts-18ic</link>
      <guid>https://dev.to/srashtigupta/why-we-use-mapped-types-conditional-types-in-ts-18ic</guid>
      <description>&lt;h2&gt;
  
  
  We Use Mapped &amp;amp; Conditional Types in TypeScript (Real-World Examples)
&lt;/h2&gt;

&lt;p&gt;When building real applications, we rarely deal with &lt;strong&gt;static types&lt;/strong&gt;.&lt;br&gt;
Data changes based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API responses&lt;/li&gt;
&lt;li&gt;User roles&lt;/li&gt;
&lt;li&gt;Form states&lt;/li&gt;
&lt;li&gt;Backend validations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mapped Types&lt;/strong&gt; and &lt;strong&gt;Conditional Types&lt;/strong&gt; help us &lt;strong&gt;reuse and transform existing types instead of rewriting them again and again&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let’s understand &lt;strong&gt;why they exist&lt;/strong&gt;, using &lt;strong&gt;simple real-world examples&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. Why Mapped Types?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Problem (Real Life)
&lt;/h3&gt;

&lt;p&gt;You have a &lt;strong&gt;User model&lt;/strong&gt; coming from the backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;isActive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now in real projects, you often need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;form version&lt;/strong&gt; (all fields optional)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;readonly version&lt;/strong&gt; (API response)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;preview version&lt;/strong&gt; (only some fields)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without mapped types ❌ you’d rewrite types manually — which is error-prone.&lt;/p&gt;




&lt;h3&gt;
  
  
  Solution: Mapped Types ✅
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Example 1: Form State (All Optional)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;]?:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding/removing fields in &lt;code&gt;User&lt;/code&gt; automatically updates &lt;code&gt;UserForm&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;No duplicate type maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly what &lt;code&gt;Partial&amp;lt;User&amp;gt;&lt;/code&gt; does internally.&lt;/p&gt;




&lt;h4&gt;
  
  
  Example 2: Read-Only API Response
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ReadonlyUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevents accidental mutation of API data&lt;/li&gt;
&lt;li&gt;Very common in frontend apps&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  Example 3: Editable Fields Only
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;EditableUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only some fields are editable&lt;/li&gt;
&lt;li&gt;Others (like &lt;code&gt;id&lt;/code&gt;) should not be touched&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Why Conditional Types?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem (Real Life)
&lt;/h3&gt;

&lt;p&gt;Different APIs or functions return &lt;strong&gt;different data types based on input&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If user is &lt;code&gt;"admin"&lt;/code&gt; → return full access&lt;/li&gt;
&lt;li&gt;If user is &lt;code&gt;"guest"&lt;/code&gt; → limited access&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Solution: Conditional Types ✅
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Example 1: Role-Based Data
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Permissions&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&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;canDelete&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="nl"&gt;canEdit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;canDelete&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="nl"&gt;canEdit&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;AdminPermissions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Permissions&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserPermissions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Permissions&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Type safety at compile time&lt;/li&gt;
&lt;li&gt;No runtime role mistakes&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  Example 2: API Response Type
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&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;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Success&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Failure&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matches how real APIs behave.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Why &lt;code&gt;infer&lt;/code&gt;? (Very Practical Example)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem
&lt;/h3&gt;

&lt;p&gt;You want to &lt;strong&gt;extract the data type&lt;/strong&gt; from an API function automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchUser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Srashti&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Manually writing types ❌ is repetitive.&lt;/p&gt;




&lt;h3&gt;
  
  
  Solution: &lt;code&gt;infer&lt;/code&gt; ✅
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ExtractReturn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="nf"&gt;extends &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;infer&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ExtractReturn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;fetchUser&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this is powerful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-syncs with function changes&lt;/li&gt;
&lt;li&gt;No manual updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is how &lt;code&gt;ReturnType&amp;lt;T&amp;gt;&lt;/code&gt; works internally.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Why Distributive Conditional Types?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem
&lt;/h3&gt;

&lt;p&gt;You have a &lt;strong&gt;union type&lt;/strong&gt; and want logic applied to each member.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ToArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ToArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// string[] | number[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this is useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validating inputs&lt;/li&gt;
&lt;li&gt;Transforming API payloads&lt;/li&gt;
&lt;li&gt;Working with union types cleanly&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Real Use of Utility Types (Behind the Scenes)
&lt;/h2&gt;

&lt;p&gt;All of these are built using &lt;strong&gt;Mapped + Conditional Types&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Partial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;Pick&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;Exclude&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;Extract&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;ReturnType&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example from real apps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UpdateUserPayload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend auto-generates &lt;code&gt;id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Frontend shouldn’t send it&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Real-World Summary (Why We Actually Use Them)
&lt;/h2&gt;

&lt;p&gt;We use &lt;strong&gt;Mapped Types&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One base model has multiple variations&lt;/li&gt;
&lt;li&gt;Forms, DTOs, API models differ slightly&lt;/li&gt;
&lt;li&gt;We want DRY (Don’t Repeat Yourself) types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use &lt;strong&gt;Conditional Types&lt;/strong&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Output type depends on input&lt;/li&gt;
&lt;li&gt;Role-based or state-based logic&lt;/li&gt;
&lt;li&gt;API responses vary&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Mapped Types and Conditional Types are not “advanced for no reason”.&lt;br&gt;
They exist because &lt;strong&gt;real applications are dynamic&lt;/strong&gt;, and TypeScript helps us model that &lt;strong&gt;safely and cleanly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once you start using them, you’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write fewer bugs&lt;/li&gt;
&lt;li&gt;Remove duplicate types&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  * Scale your codebase confidently
&lt;/h2&gt;




</description>
      <category>webdev</category>
      <category>typescript</category>
      <category>programming</category>
      <category>web</category>
    </item>
    <item>
      <title>Generating Millions of Unique IDs in TypeScript — Fast, Scalable &amp; Collision-Free</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Sat, 08 Nov 2025 14:09:15 +0000</pubDate>
      <link>https://dev.to/srashtigupta/generating-millions-of-unique-ids-in-typescript-fast-scalable-collision-free-3ik3</link>
      <guid>https://dev.to/srashtigupta/generating-millions-of-unique-ids-in-typescript-fast-scalable-collision-free-3ik3</guid>
      <description>&lt;h3&gt;
  
  
  ✨ Why I Wrote This
&lt;/h3&gt;

&lt;p&gt;While scaling a backend service recently, I hit a challenge — generating &lt;strong&gt;billions of unique IDs&lt;/strong&gt; efficiently, without collisions, and without blowing up memory.&lt;br&gt;
UUIDs were too long, and auto-increment IDs broke under distributed systems.&lt;/p&gt;

&lt;p&gt;That’s when I explored &lt;strong&gt;Snowflake algorithms&lt;/strong&gt; and combined them with &lt;strong&gt;Base62 encoding&lt;/strong&gt; — producing &lt;strong&gt;short, globally unique IDs&lt;/strong&gt; that can be generated in &lt;strong&gt;crores per minute&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here’s what I learned 👇&lt;/p&gt;


&lt;h3&gt;
  
  
  1. Introduction
&lt;/h3&gt;

&lt;p&gt;Ever wondered how &lt;strong&gt;Twitter&lt;/strong&gt;, &lt;strong&gt;YouTube&lt;/strong&gt;, or &lt;strong&gt;TikTok&lt;/strong&gt; generate &lt;em&gt;billions of unique IDs&lt;/em&gt; every day — instantly and safely?&lt;/p&gt;

&lt;p&gt;Traditional methods like &lt;code&gt;UUID&lt;/code&gt; or &lt;code&gt;AUTO_INCREMENT&lt;/code&gt; are not scalable across distributed databases.&lt;br&gt;
As systems grow, we need an ID generator that’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;Fast&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Memory-efficient&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧩 &lt;strong&gt;Collision-free&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔢 &lt;strong&gt;Compact &amp;amp; Sortable&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s explore how to build one — and even generate &lt;strong&gt;crores of unique IDs in seconds&lt;/strong&gt; using &lt;strong&gt;TypeScript&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  🧠 2. Key Requirements for a Scalable ID Generator
&lt;/h3&gt;

&lt;p&gt;An ideal ID generator should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unique&lt;/strong&gt; — zero collision risk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sortable&lt;/strong&gt; — time-based for sequencing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt; — able to generate millions/sec&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compact&lt;/strong&gt; — fixed length (~13 chars)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible&lt;/strong&gt; — predictable or opaque&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  ⚙️ 3. Popular Approaches
&lt;/h3&gt;
&lt;h4&gt;
  
  
  a) &lt;strong&gt;UUID / NanoID&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;✅ Simple, plug-and-play&lt;/li&gt;
&lt;li&gt;❌ Not sortable&lt;/li&gt;
&lt;li&gt;❌ UUIDv4 = 36 chars long&lt;/li&gt;
&lt;li&gt;⚡ NanoID shorter but slower at massive scale&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  b) &lt;strong&gt;Snowflake Algorithm (used by Twitter, TikTok)&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Snowflake&lt;/strong&gt; generates a 64-bit integer using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timestamp&lt;/li&gt;
&lt;li&gt;Machine ID&lt;/li&gt;
&lt;li&gt;Process ID&lt;/li&gt;
&lt;li&gt;Sequence Counter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s &lt;strong&gt;ultra-fast&lt;/strong&gt;, distributed-safe, and scales horizontally across servers.&lt;/p&gt;
&lt;h4&gt;
  
  
  Example in TypeScript:
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Snowflake&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;lastTimestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;machineId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;machineId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;machineId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;machineId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mb"&gt;0b11111&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 5 bits&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;nextId&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastTimestamp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mb"&gt;0b111111111111&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 12 bits&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;now&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="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastTimestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;now&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;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
      &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1700000000000&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;machineId&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔢 4. Enhancing Snowflake with Base36/Base62 Encoding
&lt;/h3&gt;

&lt;p&gt;To make IDs &lt;strong&gt;shorter, URL-safe, and more random-looking&lt;/strong&gt;, encode them in Base62.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toBase62&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bigint&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;n&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;rem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;chars&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// fixed length 13&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now combine both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;snow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Snowflake&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;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;toBase62&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;snow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nextId&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;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// e.g. "00bX5ztuG8p3L"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✨ Result:&lt;br&gt;
Short, unique, URL-safe, and &lt;strong&gt;crazy fast&lt;/strong&gt; 🔥&lt;/p&gt;


&lt;h3&gt;
  
  
  ⚡ 5. Performance Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Length&lt;/th&gt;
&lt;th&gt;Sortable&lt;/th&gt;
&lt;th&gt;Collision Risk&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Memory Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UUIDv4&lt;/td&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NanoID&lt;/td&gt;
&lt;td&gt;~21&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Snowflake&lt;/td&gt;
&lt;td&gt;19 digits&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Very Low&lt;/td&gt;
&lt;td&gt;⚡ Very Fast&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Snowflake + Base62&lt;/td&gt;
&lt;td&gt;11–13 chars&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Very Low&lt;/td&gt;
&lt;td&gt;⚡⚡ Blazing&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h3&gt;
  
  
  🔒 6. Predictability vs Randomness
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Snowflake IDs&lt;/strong&gt; are time-sequential → predictable but easy to sort.&lt;/li&gt;
&lt;li&gt;Adding &lt;strong&gt;Base62 encoding&lt;/strong&gt; makes them opaque.&lt;/li&gt;
&lt;li&gt;For extra randomness, add a &lt;strong&gt;salt or hash layer&lt;/strong&gt; (SHA1 / MD5 hash slice).&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  🌍 7. Real-world Usage
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🐦 &lt;strong&gt;Twitter&lt;/strong&gt;, 💬 &lt;strong&gt;Discord&lt;/strong&gt;, 📸 &lt;strong&gt;Instagram&lt;/strong&gt; → use Snowflake-like systems&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;TinyURL&lt;/strong&gt;, &lt;strong&gt;Bitly&lt;/strong&gt; → use Base62 for compact links&lt;/li&gt;
&lt;li&gt;☁️ &lt;strong&gt;Firebase / Firestore&lt;/strong&gt; → time-based + random push IDs&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  🧮 8. Generating in Chunks (for Crores of IDs)
&lt;/h3&gt;

&lt;p&gt;You can generate &lt;strong&gt;crores of IDs&lt;/strong&gt; efficiently by batching them into chunks.&lt;br&gt;
This avoids memory overload and stays lightning fast ⚙️&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fs&lt;/span&gt;&lt;span class="dl"&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;snow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Snowflake&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;CHUNK_SIZE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 1 lakh IDs&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TOTAL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="nx"&gt;_000_000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// 1 crore IDs&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createWriteStream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ids.txt&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;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateIDs&lt;/span&gt;&lt;span class="p"&gt;()&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;time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Generation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;TOTAL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;CHUNK_SIZE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;CHUNK_SIZE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;toBase62&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;BigInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;snow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nextId&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;
      &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&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="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&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="s2"&gt;`✅ Generated &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;CHUNK_SIZE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; IDs`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&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;timeEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Generation&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="nf"&gt;generateIDs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 This can easily scale to &lt;em&gt;tens of crores&lt;/em&gt; of unique IDs with &lt;strong&gt;constant memory usage&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧭 9. Best Choice
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Recommended Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Distributed systems (Twitter, Discord)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Snowflake + Base62&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small apps / prototypes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;NanoID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human-readable short links&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Random Base62 + Collision Check&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🏁 10. Conclusion
&lt;/h3&gt;

&lt;p&gt;A strong ID generation system is the &lt;strong&gt;backbone of scalability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;By combining &lt;strong&gt;Snowflake&lt;/strong&gt; with &lt;strong&gt;Base62 encoding&lt;/strong&gt;, we get IDs that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ Fast&lt;/li&gt;
&lt;li&gt;🧩 Compact&lt;/li&gt;
&lt;li&gt;🌍 Globally unique&lt;/li&gt;
&lt;li&gt;⏱️ Time-sortable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for &lt;strong&gt;e-commerce&lt;/strong&gt;, &lt;strong&gt;URL shorteners&lt;/strong&gt;, and &lt;strong&gt;microservice architectures&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💬 &lt;em&gt;Would you like me to write a follow-up on multi-threaded ID generation (using Node.js Workers) to scale to 100+ crore IDs? Comment below!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;💡 &lt;em&gt;If you found this helpful, follow me for more backend &amp;amp; TypeScript scalability insights!&lt;/em&gt;&lt;/p&gt;




</description>
      <category>typescript</category>
      <category>webdev</category>
      <category>backend</category>
      <category>programming</category>
    </item>
    <item>
      <title>Mastering Type Annotations in TypeScript: A Beginner’s Guide</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Tue, 28 Oct 2025 13:25:17 +0000</pubDate>
      <link>https://dev.to/srashtigupta/mastering-type-annotations-in-typescript-a-beginners-guide-4c3e</link>
      <guid>https://dev.to/srashtigupta/mastering-type-annotations-in-typescript-a-beginners-guide-4c3e</guid>
      <description>&lt;p&gt;&lt;em&gt;TypeScript makes JavaScript smarter — and Type Annotations are the brain behind it.&lt;/em&gt; 🧩&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 What Are Type Annotations?
&lt;/h2&gt;

&lt;p&gt;Type annotations let you &lt;strong&gt;explicitly define the type&lt;/strong&gt; of a variable, function parameter, or return value in TypeScript.&lt;br&gt;
They’re written using a colon (&lt;code&gt;:&lt;/code&gt;) followed by the type.&lt;/p&gt;

&lt;p&gt;let message: string = "Hello, TypeScript!";&lt;/p&gt;

&lt;p&gt;function add(a: number, b: number): number {&lt;br&gt;
  return a + b;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;message&lt;/code&gt; is a &lt;code&gt;string&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; are &lt;code&gt;number&lt;/code&gt;s&lt;/li&gt;
&lt;li&gt;The function &lt;code&gt;add&lt;/code&gt; returns a &lt;code&gt;number&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Why Use Type Annotations?
&lt;/h2&gt;

&lt;p&gt;Even though TypeScript can infer types, using explicit annotations gives you more control and clarity.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Clarity &amp;amp; Readability&lt;/strong&gt; – self-documenting code&lt;br&gt;
✅ &lt;strong&gt;Error Detection&lt;/strong&gt; – catch mistakes before runtime&lt;br&gt;
✅ &lt;strong&gt;IDE Support&lt;/strong&gt; – better autocompletion and refactoring&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Where Type Annotations Are Used
&lt;/h2&gt;

&lt;p&gt;Let’s explore the most common use cases 👇&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 🧮 Variables &amp;amp; Constants
&lt;/h3&gt;

&lt;p&gt;let name: string = "Alice";&lt;br&gt;
const age: number = 30;&lt;br&gt;
let isActive: boolean = true;&lt;/p&gt;

&lt;p&gt;These ensure that each variable holds only the correct type of data.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 📦 Arrays
&lt;/h3&gt;

&lt;p&gt;You can annotate arrays in two ways:&lt;/p&gt;

&lt;p&gt;let numbers: number[] = [1, 2, 3];&lt;br&gt;
let names: Array = ["Bob", "Charlie"];&lt;/p&gt;

&lt;p&gt;Both are valid; pick your preferred style.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 👥 Object Types
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Anonymous Object Type
&lt;/h4&gt;

&lt;p&gt;function printPerson(person: { name: string; age: number }) {&lt;br&gt;
  console.log(&lt;code&gt;Name: ${person.name}, Age: ${person.age}&lt;/code&gt;);&lt;br&gt;
}&lt;/p&gt;

&lt;h4&gt;
  
  
  Named Object Type (Using Interface)
&lt;/h4&gt;

&lt;p&gt;interface User {&lt;br&gt;
  id: number;&lt;br&gt;
  username: string;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;let user: User = { id: 1, username: "John Doe" };&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Tip:&lt;/strong&gt; Use interfaces when multiple objects share the same structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 🔢 Function Return Types
&lt;/h3&gt;

&lt;p&gt;Specify what a function should return for safety and clarity.&lt;/p&gt;

&lt;p&gt;function multiply(a: number, b: number): number {&lt;br&gt;
  return a * b;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;function logMessage(message: string): void {&lt;br&gt;
  console.log(message);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;void&lt;/code&gt; for functions that don’t return anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. 🔁 Type Aliases for Functions
&lt;/h3&gt;

&lt;p&gt;A type alias defines a reusable function pattern.&lt;/p&gt;

&lt;p&gt;type MathOperation = (x: number, y: number) =&amp;gt; number;&lt;/p&gt;

&lt;p&gt;let subtract: MathOperation = (a, b) =&amp;gt; a - b;&lt;/p&gt;

&lt;p&gt;This is perfect for maintaining consistency across multiple operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Variable Type&lt;/td&gt;
&lt;td&gt;&lt;code&gt;let name: string = "Alice"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines type of variable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function Params&lt;/td&gt;
&lt;td&gt;&lt;code&gt;function add(a: number, b: number)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ensures input types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Return Type&lt;/td&gt;
&lt;td&gt;&lt;code&gt;: number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specifies return value type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Array&lt;/td&gt;
&lt;td&gt;&lt;code&gt;let arr: number[] = [1,2,3]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines element type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;&lt;code&gt;interface User { id: number; name: string }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines object structure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type Alias&lt;/td&gt;
&lt;td&gt;&lt;code&gt;type Operation = (x: number, y: number) =&amp;gt; number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Function type pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;Type annotations are the backbone of TypeScript’s type safety.&lt;br&gt;
They turn your JavaScript into a &lt;strong&gt;predictable, readable, and maintainable&lt;/strong&gt; codebase.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💬 As your project grows, explicit type annotations save hours of debugging and make your app scalable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🧑‍💻 &lt;strong&gt;Written by:&lt;/strong&gt; &lt;a href="https://dev.to/"&gt;Srashti Gupta&lt;/a&gt;&lt;br&gt;
📅 &lt;strong&gt;Published on:&lt;/strong&gt; October 2025&lt;br&gt;
🏷️ &lt;em&gt;#typescript #javascript #webdev #programming #beginners&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>TypeScript Important Concepts Every Developer Should Know</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Thu, 09 Oct 2025 17:17:37 +0000</pubDate>
      <link>https://dev.to/srashtigupta/typescript-important-concepts-every-developer-should-know-4jma</link>
      <guid>https://dev.to/srashtigupta/typescript-important-concepts-every-developer-should-know-4jma</guid>
      <description>&lt;p&gt;TypeScript is an &lt;strong&gt;open-source programming language&lt;/strong&gt; that builds on JavaScript by adding &lt;strong&gt;optional static typing&lt;/strong&gt; and &lt;strong&gt;class-based object-oriented programming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It helps developers write &lt;strong&gt;more reliable&lt;/strong&gt;, &lt;strong&gt;scalable&lt;/strong&gt;, and &lt;strong&gt;maintainable&lt;/strong&gt; code — especially in &lt;strong&gt;large-scale projects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this article, we’ll explore &lt;strong&gt;10 key TypeScript concepts&lt;/strong&gt; that every developer should understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. Type Annotations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Type annotations let you specify the data type of variables, function parameters, and return values.&lt;br&gt;
This helps &lt;strong&gt;catch errors early&lt;/strong&gt; and improves &lt;strong&gt;code readability&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;age&lt;/code&gt; must always be a &lt;strong&gt;number&lt;/strong&gt;.&lt;br&gt;
If you try assigning a string to it, TypeScript will throw a compile-time error.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;2. Interfaces&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;interface&lt;/strong&gt; defines the &lt;strong&gt;shape of an object&lt;/strong&gt; — its structure and property types.&lt;br&gt;
It ensures consistency across multiple objects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Srashti&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; Interfaces help enforce structure, making code predictable and self-documenting.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. Classes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;TypeScript supports full &lt;strong&gt;object-oriented programming (OOP)&lt;/strong&gt; through classes.&lt;br&gt;
They serve as blueprints for objects, supporting &lt;strong&gt;inheritance&lt;/strong&gt;, &lt;strong&gt;constructors&lt;/strong&gt;, and &lt;strong&gt;access modifiers&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;Animal&lt;/code&gt; is a class with a property &lt;code&gt;name&lt;/code&gt; and a constructor that initializes it.&lt;/p&gt;

&lt;p&gt;TypeScript extends JavaScript classes with features like &lt;strong&gt;access modifiers (public, private, protected)&lt;/strong&gt; and &lt;strong&gt;readonly properties&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. Generics&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Generics let you write &lt;strong&gt;reusable and type-safe&lt;/strong&gt; functions, interfaces, and classes.&lt;br&gt;
They help avoid code duplication while maintaining flexibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Srashti&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;Why use Generics?&lt;/strong&gt;&lt;br&gt;
They allow your functions to work with &lt;strong&gt;any data type&lt;/strong&gt;, ensuring &lt;strong&gt;type safety&lt;/strong&gt; without losing flexibility.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;5. Enums&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Enums define a set of &lt;strong&gt;named constant values&lt;/strong&gt; — useful when dealing with a predefined list of options.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;Color&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Red&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Green&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Blue&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also assign specific numeric values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;Color&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Red&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Green&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;Blue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes your code more readable and prevents invalid values.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;6. Type Inference&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;TypeScript can &lt;strong&gt;infer types automatically&lt;/strong&gt; based on assigned values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// inferred as 'number'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even without explicit type annotations, TypeScript understands that &lt;code&gt;age&lt;/code&gt; is a number.&lt;/p&gt;

&lt;p&gt;It also infers function return types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// inferred as number&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;7. Union and Intersection Types&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Union types allow variables to hold &lt;strong&gt;multiple possible types&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;twenty-seven&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Intersection types, on the other hand, &lt;strong&gt;combine multiple types&lt;/strong&gt; into one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;bark&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;meow&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;Animal&lt;/code&gt; includes both &lt;code&gt;bark()&lt;/code&gt; and &lt;code&gt;meow()&lt;/code&gt; methods.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;8. Type Guards&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Type guards allow you to &lt;strong&gt;check variable types at runtime&lt;/strong&gt;, especially when using unions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;number&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="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;value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&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;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type guards help you safely handle multiple types in a single function.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;9. Decorators&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Decorators are &lt;strong&gt;metadata annotations&lt;/strong&gt; for classes, methods, or properties.&lt;br&gt;
They are often used in frameworks like &lt;strong&gt;Angular&lt;/strong&gt; and &lt;strong&gt;NestJS&lt;/strong&gt; for dependency injection and configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;deprecated&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example marks the class as deprecated.&lt;br&gt;
Decorators are still an &lt;strong&gt;experimental feature&lt;/strong&gt;, so you need to enable them in your &lt;code&gt;tsconfig.json&lt;/code&gt; file (&lt;code&gt;"experimentalDecorators": true&lt;/code&gt;).&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;10. Modules&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Modules help &lt;strong&gt;organize code&lt;/strong&gt; into smaller, reusable pieces.&lt;br&gt;
They allow you to export and import variables, classes, or functions between files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// mathUtils.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// main.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./mathUtils&lt;/span&gt;&lt;span class="dl"&gt;'&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="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modules make code &lt;strong&gt;modular&lt;/strong&gt;, &lt;strong&gt;maintainable&lt;/strong&gt;, and &lt;strong&gt;easy to scale&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;TypeScript adds a &lt;strong&gt;powerful type system&lt;/strong&gt; and &lt;strong&gt;OOP features&lt;/strong&gt; to JavaScript, helping developers build large, error-free applications.&lt;/p&gt;

&lt;p&gt;Mastering these 10 concepts — &lt;strong&gt;from type annotations to generics and modules&lt;/strong&gt; — will greatly improve your ability to write &lt;strong&gt;clean, robust, and professional TypeScript code&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>typescript</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>🌟 Understanding Generics in TypeScript: The Key to Reusable, Type-Safe Code</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Thu, 09 Oct 2025 16:50:55 +0000</pubDate>
      <link>https://dev.to/srashtigupta/understanding-generics-in-typescript-the-key-to-reusable-type-safe-code-2963</link>
      <guid>https://dev.to/srashtigupta/understanding-generics-in-typescript-the-key-to-reusable-type-safe-code-2963</guid>
      <description>&lt;p&gt;Generics are a &lt;strong&gt;fundamental feature in TypeScript&lt;/strong&gt; that allow developers to create &lt;strong&gt;reusable&lt;/strong&gt;, &lt;strong&gt;flexible&lt;/strong&gt;, and &lt;strong&gt;type-safe&lt;/strong&gt; components.&lt;br&gt;
They enable functions, classes, and interfaces to work with &lt;strong&gt;different data types&lt;/strong&gt; without losing type information — ensuring both &lt;strong&gt;code reusability&lt;/strong&gt; and &lt;strong&gt;type safety&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 Why Do We Need Generics?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. &lt;strong&gt;Code Reusability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Generics allow you to write a single function, class, or interface that can operate on different data types.&lt;/p&gt;

&lt;p&gt;Without generics, you might end up writing multiple versions of the same function for each data type.&lt;br&gt;
Generics solve that problem by using &lt;strong&gt;type parameters&lt;/strong&gt; — placeholders for any type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;myString&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;&amp;lt;T&amp;gt;&lt;/code&gt; acts as a &lt;strong&gt;type variable&lt;/strong&gt;, allowing the same function to handle both &lt;code&gt;string&lt;/code&gt; and &lt;code&gt;number&lt;/code&gt; without duplicating logic.&lt;/p&gt;




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

&lt;p&gt;Generics enable &lt;strong&gt;compile-time type checking&lt;/strong&gt;, catching errors early in the development process — long before they cause runtime issues.&lt;/p&gt;

&lt;p&gt;TypeScript knows exactly what type you’re working with, which improves both reliability and maintainability.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. &lt;strong&gt;Improved Code Readability&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;By explicitly defining generic types, you make your code’s intent clearer.&lt;br&gt;
Readers and collaborators can easily understand the expected data types and structure.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 Generic Building Blocks
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Type Parameters&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Generic types use &lt;strong&gt;type parameters&lt;/strong&gt;, usually represented by &lt;strong&gt;uppercase letters&lt;/strong&gt; inside &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;T&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;K&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;V&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Value&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  ⚙️ Generic Functions
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;generic function&lt;/strong&gt; allows you to handle multiple data types with one implementation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Srashti&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧾 Generic Interfaces
&lt;/h2&gt;

&lt;p&gt;Generic interfaces define &lt;strong&gt;contracts&lt;/strong&gt; for objects that can work with multiple data types.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;GenericIdentityFn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;myIdentity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;GenericIdentityFn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures that the &lt;code&gt;identity&lt;/code&gt; function only works with the data type defined (&lt;code&gt;number&lt;/code&gt; in this case).&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ Generic Classes
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;generic class&lt;/strong&gt; can handle data of different types dynamically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;GenericNumber&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;zeroValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;add&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;myGenericNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;GenericNumber&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;myGenericNumber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;zeroValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;myGenericNumber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it easy to create flexible classes that adapt to multiple data types.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔒 Generic Constraints
&lt;/h2&gt;

&lt;p&gt;Sometimes, you want to restrict what kinds of types can be passed to a generic.&lt;br&gt;
You can use &lt;strong&gt;constraints&lt;/strong&gt; with the &lt;code&gt;extends&lt;/code&gt; keyword.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Lengthwise&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;loggingIdentity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Lengthwise&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&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;arg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Safe access to 'length'&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, only types that have a &lt;code&gt;length&lt;/code&gt; property (like strings or arrays) can be used with this function.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 Generics in TypeScript APIs
&lt;/h2&gt;

&lt;p&gt;When building APIs, generics make your functions and interfaces reusable and type-safe — especially for &lt;strong&gt;API responses&lt;/strong&gt; that share the same structure but contain different data types.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. &lt;strong&gt;Generic Interface for API Response&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;message&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;T&lt;/code&gt; represents the type of data returned by the API — it can be &lt;code&gt;User[]&lt;/code&gt;, &lt;code&gt;Product[]&lt;/code&gt;, or anything else.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. &lt;strong&gt;Generic Function for Fetching Data&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`HTTP error! status: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&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="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This function adapts to any API endpoint while maintaining strict type safety.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. &lt;strong&gt;Using Generic Types with Different Data&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Fetch Users&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&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;userResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetchData&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;'&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;userResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Type: User[]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&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;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Fetch Products&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getProducts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&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;productResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetchData&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/products&lt;/span&gt;&lt;span class="dl"&gt;'&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;productResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Type: Product[]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&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;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 Benefits of Using Generics in APIs
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;Type Safety:&lt;/strong&gt; Prevents type mismatches and runtime errors.&lt;br&gt;
✅ &lt;strong&gt;Reusability:&lt;/strong&gt; Use the same logic for different endpoints.&lt;br&gt;
✅ &lt;strong&gt;Reduced Code Duplication:&lt;/strong&gt; Write once, use everywhere.&lt;br&gt;
✅ &lt;strong&gt;Improved Readability:&lt;/strong&gt; Clearly define the shape and type of expected data.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Conclusion
&lt;/h2&gt;

&lt;p&gt;Generics are one of the most powerful features in TypeScript.&lt;br&gt;
They make your code &lt;strong&gt;cleaner, safer, and more scalable&lt;/strong&gt; — perfect for building robust applications or APIs.&lt;/p&gt;

&lt;p&gt;Whether you’re creating utility functions, classes, or API handlers, mastering generics will &lt;strong&gt;level up your TypeScript skills&lt;/strong&gt; and help you write professional, production-ready code.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🛠 Common CI/CD Errors in Docker + AWS ECS Deployment (and How to Fix Them)</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Tue, 15 Jul 2025 13:31:27 +0000</pubDate>
      <link>https://dev.to/srashtigupta/common-cicd-errors-in-docker-aws-ecs-deployment-and-how-to-fix-them-cin</link>
      <guid>https://dev.to/srashtigupta/common-cicd-errors-in-docker-aws-ecs-deployment-and-how-to-fix-them-cin</guid>
      <description>&lt;p&gt;Facing issues while deploying your Node.js app to AWS ECS with Docker and GitHub Actions? Here’s a complete list of &lt;strong&gt;common CI/CD errors&lt;/strong&gt; and easy, step-by-step solutions with clear explanations. ✅&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 Issue &amp;amp; 🛠 Fix Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🔍 Issue&lt;/th&gt;
&lt;th&gt;🛠 Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;❌ Docker build fails&lt;/td&gt;
&lt;td&gt;✅ Check Dockerfile syntax and &lt;code&gt;.dockerignore&lt;/code&gt; context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ Missing secrets&lt;/td&gt;
&lt;td&gt;✅ Add all secrets in GitHub → Settings → Actions → Secrets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ ECS service fails to deploy&lt;/td&gt;
&lt;td&gt;✅ Double-check ECS cluster, task def, and service names&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ App crashes in ECS&lt;/td&gt;
&lt;td&gt;✅ View logs under ECS → Tasks → Logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;❌ Latest image not deployed&lt;/td&gt;
&lt;td&gt;✅ Use &lt;code&gt;--force-new-deployment&lt;/code&gt; in ECS or update image tag&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔍 Error: Docker Build Fails
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Message:&lt;/strong&gt;&lt;br&gt;
Docker build command fails, often with missing file or bad instruction errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You likely forgot to copy &lt;code&gt;package.json&lt;/code&gt; correctly in your Dockerfile (or misplaced the order).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .  # copy source only after dependencies&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔍 Error: Missing Secrets or Environment Variables
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Message:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MONGO_URI is undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Your code references secrets/env-vars not passed along in the ECS definition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Fix:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;ECS → Task Definitions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Add required environment variables: e.g., &lt;code&gt;MONGO_URI&lt;/code&gt;, &lt;code&gt;JWT_SECRET&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;(Alternatively) Use &lt;strong&gt;AWS Secrets Manager&lt;/strong&gt; and reference them in the task.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  🔍 Error: ECS Fails to Deploy New Task
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm ERR! enoent ENOENT: no such file or directory, open 'package.json'&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ServiceNotFoundException&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CannotPullContainerError&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Incorrect ECS cluster/service/task name in your GitHub Actions workflow, or the image/tag does not exist in ECR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Fix:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Double-check the names in your:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECS cluster&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ECS service&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task definition&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ensure the correct image tag exists in the ECR repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  🔍 Error: App Crashes After Deployment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ECS service stops immediately. No public access or &lt;code&gt;502 Bad Gateway&lt;/code&gt; from load balancer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Fix:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;ECS → Tasks → Logs&lt;/strong&gt; and view the error output.&lt;/li&gt;
&lt;li&gt;Make sure your app is listening globally, not just on &lt;code&gt;localhost&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0.0.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  🔍 Error: Docker Image Doesn’t Update
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cause:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You’re using a static &lt;code&gt;latest&lt;/code&gt; tag and ECS believes it already deployed it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Fix:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use &lt;code&gt;--force-new-deployment&lt;/code&gt; to trigger ECS to re-pull the image, or update to a different tag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;🚀 Deploy to Amazon ECS&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;aws ecs update-service \&lt;/span&gt;
      &lt;span class="s"&gt;--cluster $ECS_CLUSTER \&lt;/span&gt;
      &lt;span class="s"&gt;--service $ECS_SERVICE \&lt;/span&gt;
      &lt;span class="s"&gt;--force-new-deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Bonus: Use a &lt;code&gt;.dockerignore&lt;/code&gt; File
&lt;/h2&gt;

&lt;p&gt;Speed up builds and prevent accidental context issues:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules
.env
.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧠 Conclusion
&lt;/h2&gt;

&lt;p&gt;CI/CD is powerful, but small misconfigurations can halt deployments. Be sure to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Carefully review build logs&lt;/li&gt;
&lt;li&gt;Monitor ECS logs&lt;/li&gt;
&lt;li&gt;Always verify secrets and naming&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once setup is smooth, your Dockerized Node.js app will deploy automatically to AWS ECS with every push! 🔁&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let me know in the comments if you’d like a template for:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions workflow
&lt;/li&gt;
&lt;li&gt;Dockerfile
&lt;/li&gt;
&lt;li&gt;AWS ECS task definition (in JSON)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Deploying! 🚀&lt;/p&gt;

</description>
      <category>docker</category>
      <category>aws</category>
      <category>devops</category>
      <category>node</category>
    </item>
    <item>
      <title>React Performance Optimization Techniques</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Tue, 08 Jul 2025 15:35:10 +0000</pubDate>
      <link>https://dev.to/srashtigupta/react-performance-optimization-techniques-3nba</link>
      <guid>https://dev.to/srashtigupta/react-performance-optimization-techniques-3nba</guid>
      <description>&lt;p&gt;Optimizing React applications is essential for delivering fast, responsive user experiences. Below is an in-depth exploration of the most effective strategies for improving React performance, including practical implementation advice and key considerations.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Lazy Loading
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Load components, modules, or assets only when they are needed, rather than during the initial page load.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;React.lazy()&lt;/code&gt; and `` to load components dynamically.&lt;/li&gt;
&lt;li&gt;For images and assets, use the &lt;code&gt;loading="lazy"&lt;/code&gt; attribute or libraries like &lt;code&gt;react-lazy-load-image-component&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Reduces initial bundle size.&lt;/li&gt;
&lt;li&gt;Improves first paint and time-to-interactive, especially in large apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. React.memo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A higher-order component that memoizes functional components, preventing unnecessary re-renders when props have not changed.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Wrap function components with &lt;code&gt;React.memo(Component)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Only re-renders if props change via shallow comparison.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Useful for components that render frequently with the same props.&lt;/li&gt;
&lt;li&gt;Particularly effective for list items, buttons, or visual elements that rarely change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Code Splitting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Splitting the application code into smaller chunks that are loaded on demand.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use dynamic &lt;code&gt;import()&lt;/code&gt; statements.&lt;/li&gt;
&lt;li&gt;Leverage tools like Webpack, Rollup, or route-based splitting with React Router.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Reduces initial load time.&lt;/li&gt;
&lt;li&gt;Allows users to download only what they need, when they need it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Inline Functions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Issue:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Defining functions inside render methods or JSX creates new function instances on every render, which can trigger unnecessary re-renders in child components.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;useCallback&lt;/code&gt; to memoize functions.&lt;/li&gt;
&lt;li&gt;Define functions outside the render scope when possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Lazy Loading Images
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Defer loading of images until they enter the viewport.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;loading="lazy"&lt;/code&gt; attribute on `` tags.&lt;/li&gt;
&lt;li&gt;For more control, use Intersection Observer API or libraries like &lt;code&gt;react-lazy-load-image-component&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Reduces bandwidth usage.&lt;/li&gt;
&lt;li&gt;Speeds up initial render, especially in image-heavy applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Memoization
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cache the results of expensive computations or component renders to avoid redundant work.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;useMemo()&lt;/code&gt; for memoizing values.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;useCallback()&lt;/code&gt; for memoizing functions.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Prevents unnecessary recalculations.&lt;/li&gt;
&lt;li&gt;Reduces CPU usage and improves responsiveness.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. React Fragments
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Group multiple elements without adding extra nodes to the DOM.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt; or ``.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Reduces DOM size and memory usage.&lt;/li&gt;
&lt;li&gt;Useful for rendering lists or complex layouts efficiently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Throttling and Debouncing Events
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Limit how often event handlers (like scroll, resize, or input) are triggered.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use utility libraries such as Lodash (&lt;code&gt;_.throttle&lt;/code&gt;, &lt;code&gt;_.debounce&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Custom hooks can be created for reusable throttling/debouncing logic.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Prevents performance bottlenecks from rapid event firing.&lt;/li&gt;
&lt;li&gt;Improves perceived and actual responsiveness.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. Key Coordination for List Rendering
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Practice:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Assign unique and stable keys to list items.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Important:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Helps React efficiently update and reconcile lists.&lt;/li&gt;
&lt;li&gt;Avoids unnecessary re-renders and DOM manipulations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10. Measuring React Performance
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;React DevTools Profiler: Analyze component render times and re-renders.&lt;/li&gt;
&lt;li&gt;Browser Performance APIs: Use &lt;code&gt;window.performance&lt;/code&gt; for custom metrics.&lt;/li&gt;
&lt;li&gt;Custom logging: Track specific performance bottlenecks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  11. Memoize React Components
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;React.memo&lt;/code&gt; for functional components.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;PureComponent&lt;/code&gt; for class components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Effect:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Prevents unnecessary re-renders by performing shallow prop and state comparisons.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Dependency Optimization
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Carefully manage dependencies in hooks (&lt;code&gt;useEffect&lt;/code&gt;, &lt;code&gt;useMemo&lt;/code&gt;, &lt;code&gt;useCallback&lt;/code&gt;) to avoid redundant executions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Practices:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only include necessary dependencies.&lt;/li&gt;
&lt;li&gt;Avoid creating new objects or functions inside dependencies unless required.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13. Implement PureComponent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A class component that implements a shallow comparison of props and state in &lt;code&gt;shouldComponentUpdate&lt;/code&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Prevents unnecessary re-renders for class components.&lt;/li&gt;
&lt;li&gt;Useful for optimizing performance in large, complex UIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  14. List Virtualization
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Render only the visible portion of long lists, rather than the entire list.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use libraries like &lt;code&gt;react-window&lt;/code&gt; or &lt;code&gt;react-virtualized&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Greatly reduces DOM node count and memory usage.&lt;/li&gt;
&lt;li&gt;Improves scroll performance in large lists.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  15. useCallback
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Memoize callback functions so they are not recreated on every render.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Wrap functions passed as props to child components.&lt;/li&gt;
&lt;li&gt;Reduces unnecessary re-renders in children relying on function identity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  16. Web Workers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Offload heavy computations to background threads.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use the Web Workers API for tasks like data processing, image manipulation, or parsing.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Keeps the UI thread responsive.&lt;/li&gt;
&lt;li&gt;Prevents blocking user interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  17. Keeping Component State Local
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Store state as locally as possible, rather than lifting it unnecessarily.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Reduces the number of components that re-render when state changes.&lt;/li&gt;
&lt;li&gt;Simplifies component logic and improves maintainability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  18. Use Production Build
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Production builds of React are optimized for performance, with extra checks and warnings removed.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;npm run build&lt;/code&gt; to create an optimized bundle for deployment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  19. React Redux Optimization
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;connect&lt;/code&gt;'s &lt;code&gt;mapStateToProps&lt;/code&gt; efficiently to avoid unnecessary re-renders.&lt;/li&gt;
&lt;li&gt;Use selectors (e.g., Reselect) for memoizing derived data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  20. Immutable Data Structures
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Concept:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use immutable objects and arrays for state management.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Makes change detection faster and more predictable.&lt;/li&gt;
&lt;li&gt;Helps React efficiently determine when to update components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By combining these techniques, you can significantly enhance the speed, responsiveness, and scalability of your React applications. Each optimization should be applied judiciously, based on profiling and actual app needs, to achieve the best results.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>USE EFFECT HOOK</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Wed, 04 Jun 2025 11:10:12 +0000</pubDate>
      <link>https://dev.to/srashtigupta/use-effect-hook-g35</link>
      <guid>https://dev.to/srashtigupta/use-effect-hook-g35</guid>
      <description>&lt;p&gt;Here’s a clean, well-structured, and engaging blog post draft about the React useEffect hook, including best practices, examples, and common pitfalls, all based on the latest guidance and real-world scenarios:&lt;/p&gt;




&lt;h2&gt;
  
  
  Demystifying the useEffect Hook in React
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why I Wrote This Post
&lt;/h3&gt;

&lt;p&gt;When I first started building React apps, I found myself confused about when and how to use the useEffect hook. It’s a powerful tool for handling side effects, but it can also introduce subtle bugs if not used carefully. In this post, I’ll share what I’ve learned about useEffect, show you practical examples, and help you avoid common mistakes—so you can write more predictable and efficient React code.&lt;/p&gt;







&lt;h2&gt;
  
  
  What Is useEffect?
&lt;/h2&gt;

&lt;p&gt;The useEffect hook lets you perform side effects in your React functional components. Side effects include tasks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetching data from an API&lt;/li&gt;
&lt;li&gt;Setting up event listeners&lt;/li&gt;
&lt;li&gt;Updating the DOM directly&lt;/li&gt;
&lt;li&gt;Managing timers or subscriptions[1][3][4][17]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before hooks, these tasks were handled in class components using lifecycle methods like &lt;code&gt;componentDidMount&lt;/code&gt;, &lt;code&gt;componentDidUpdate&lt;/code&gt;, and &lt;code&gt;componentWillUnmount&lt;/code&gt;. With useEffect, you can do all of this in functional components—making your code more concise and easier to manage[1][3][17].&lt;/p&gt;




&lt;h2&gt;
  
  
  Basic Syntax
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Side effect logic here&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Optional cleanup logic here&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;dependencies&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;
&lt;strong&gt;Effect function:&lt;/strong&gt; Runs after every render by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleanup function (optional):&lt;/strong&gt; Runs before the effect is re-executed or when the component unmounts—useful for cleaning up subscriptions, timers, or event listeners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencies array:&lt;/strong&gt; Controls when the effect runs. If empty (&lt;code&gt;[]&lt;/code&gt;), the effect runs only once after the initial render; if omitted, it runs after every render; if you list variables, it runs when any of those variables change[3][4][8][13][15].&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Practical Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Run Once on Mount
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Component mounted!&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="p"&gt;[]);&lt;/span&gt; &lt;span class="c1"&gt;// Only runs once after the first render&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Run When a Value Changes
&lt;/h3&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Count: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// Runs every time count changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Fetch Data on Mount
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchData&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/data&lt;/span&gt;&lt;span class="dl"&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nf"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt; &lt;span class="c1"&gt;// Runs only once after the first render&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Cleanup Example (Event Listener)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleResize&lt;/span&gt;&lt;span class="p"&gt;()&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Window resized!&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="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handleResize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handleResize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt; &lt;span class="c1"&gt;// Adds and cleans up the event listener&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Always specify the dependencies array:&lt;/strong&gt; This prevents unnecessary or missed effect executions and avoids performance issues[8][16].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Include all dependencies:&lt;/strong&gt; List every variable from the component scope that your effect uses. Missing dependencies can cause bugs or stale data[8][16].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use multiple useEffect hooks for separate concerns:&lt;/strong&gt; This keeps your code organized and easier to debug[2][8].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always clean up side effects:&lt;/strong&gt; Return a cleanup function to remove event listeners, timers, or subscriptions to prevent memory leaks[8][15].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid overusing useEffect:&lt;/strong&gt; Not all logic needs to be inside useEffect. For derived state or simple computations, use regular variables or memoization[2][6][8].&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Pitfalls and How to Avoid Them
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pitfall&lt;/th&gt;
&lt;th&gt;How to Avoid It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Forgetting dependencies&lt;/td&gt;
&lt;td&gt;Always include all variables your effect uses in the dependency array[8][16].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infinite loops from state updates&lt;/td&gt;
&lt;td&gt;Don’t update state unconditionally inside useEffect; use guards or conditions if needed[8][16].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory leaks from uncleaned side effects&lt;/td&gt;
&lt;td&gt;Always return a cleanup function to remove listeners, timers, or subscriptions[8][15].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overcomplicating effects&lt;/td&gt;
&lt;td&gt;Only use useEffect for true side effects, not for simple value calculations or rendering logic[8][2].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Using useEffect for data transformation&lt;/td&gt;
&lt;td&gt;Compute derived data directly in render, not in useEffect[2][8].&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The useEffect hook is essential for handling side effects in React functional components. By understanding its syntax, using the dependency array correctly, and following best practices, you can avoid common bugs and write more maintainable code. Remember to clean up after your effects, and don’t use useEffect for tasks that can be handled directly in render.&lt;/p&gt;




&lt;h2&gt;
  
  
  Let’s Discuss!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Have you run into tricky bugs with useEffect?&lt;/li&gt;
&lt;li&gt;Do you have tips or patterns that work well for you?&lt;/li&gt;
&lt;li&gt;Any questions about dependencies or cleanup?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your experiences and questions in the comments below!&lt;/p&gt;

&lt;p&gt;[1] &lt;a href="https://www.geeksforgeeks.org/reactjs-useeffect-hook/" rel="noopener noreferrer"&gt;https://www.geeksforgeeks.org/reactjs-useeffect-hook/&lt;/a&gt;&lt;br&gt;
[2] &lt;a href="https://www.zipy.ai/blog/useeffect-hook-guide" rel="noopener noreferrer"&gt;https://www.zipy.ai/blog/useeffect-hook-guide&lt;/a&gt;&lt;br&gt;
[3] &lt;a href="https://namastedev.com/blog/react-useeffect-hook-deep-dive-7/" rel="noopener noreferrer"&gt;https://namastedev.com/blog/react-useeffect-hook-deep-dive-7/&lt;/a&gt;&lt;br&gt;
[4] &lt;a href="https://www.w3schools.com/react/react_useeffect.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/react/react_useeffect.asp&lt;/a&gt;&lt;br&gt;
[5] &lt;a href="https://deadsimplechat.com/blog/react-useeffect-a-complete-guide-with-examples/" rel="noopener noreferrer"&gt;https://deadsimplechat.com/blog/react-useeffect-a-complete-guide-with-examples/&lt;/a&gt;&lt;br&gt;
[6] &lt;a href="https://www.developerupdates.com/blog/avoid-these-7-react-useeffect-mistakes" rel="noopener noreferrer"&gt;https://www.developerupdates.com/blog/avoid-these-7-react-useeffect-mistakes&lt;/a&gt;&lt;br&gt;
[7] &lt;a href="https://www.linkedin.com/pulse/useeffect-mastery-tips-tricks-avoiding-common-mistakes-novin-noori" rel="noopener noreferrer"&gt;https://www.linkedin.com/pulse/useeffect-mastery-tips-tricks-avoiding-common-mistakes-novin-noori&lt;/a&gt;&lt;br&gt;
[8] &lt;a href="https://dev.to/hkp22/reacts-useeffect-best-practices-pitfalls-and-modern-javascript-insights-g2f"&gt;https://dev.to/hkp22/reacts-useeffect-best-practices-pitfalls-and-modern-javascript-insights-g2f&lt;/a&gt;&lt;br&gt;
[9] &lt;a href="https://legacy.reactjs.org/docs/hooks-effect.html" rel="noopener noreferrer"&gt;https://legacy.reactjs.org/docs/hooks-effect.html&lt;/a&gt;&lt;br&gt;
[10] &lt;a href="https://blog.logrocket.com/useeffect-react-hook-complete-guide/" rel="noopener noreferrer"&gt;https://blog.logrocket.com/useeffect-react-hook-complete-guide/&lt;/a&gt;&lt;br&gt;
[11] &lt;a href="https://daveceddia.com/useeffect-hook-examples/" rel="noopener noreferrer"&gt;https://daveceddia.com/useeffect-hook-examples/&lt;/a&gt;&lt;br&gt;
[12] &lt;a href="https://www.telerik.com/blogs/7-common-mistakes-using-react-hooks" rel="noopener noreferrer"&gt;https://www.telerik.com/blogs/7-common-mistakes-using-react-hooks&lt;/a&gt;&lt;br&gt;
[13] &lt;a href="https://dmitripavlutin.com/react-useeffect-explanation/" rel="noopener noreferrer"&gt;https://dmitripavlutin.com/react-useeffect-explanation/&lt;/a&gt;&lt;br&gt;
[14] &lt;a href="https://www.geeksforgeeks.org/what-are-the-pitfalls-of-using-hooks-and-how-can-you-avoid-them/" rel="noopener noreferrer"&gt;https://www.geeksforgeeks.org/what-are-the-pitfalls-of-using-hooks-and-how-can-you-avoid-them/&lt;/a&gt;&lt;br&gt;
[15] &lt;a href="https://hygraph.com/blog/react-useeffect-a-complete-guide" rel="noopener noreferrer"&gt;https://hygraph.com/blog/react-useeffect-a-complete-guide&lt;/a&gt;&lt;br&gt;
[16] &lt;a href="https://blog.bitsrc.io/5-common-mistakes-when-using-useeffect-in-react-84c973060440" rel="noopener noreferrer"&gt;https://blog.bitsrc.io/5-common-mistakes-when-using-useeffect-in-react-84c973060440&lt;/a&gt;&lt;br&gt;
[17] &lt;a href="https://www.freecodecamp.org/news/react-hooks-useeffect-usestate-and-usecontext/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/news/react-hooks-useeffect-usestate-and-usecontext/&lt;/a&gt;&lt;br&gt;
[18] &lt;a href="https://akoskm.com/common-useeffect-mistakes/" rel="noopener noreferrer"&gt;https://akoskm.com/common-useeffect-mistakes/&lt;/a&gt;&lt;br&gt;
[19] &lt;a href="https://react.dev/reference/react/useEffect" rel="noopener noreferrer"&gt;https://react.dev/reference/react/useEffect&lt;/a&gt;&lt;br&gt;
[20] &lt;a href="https://overreacted.io/a-complete-guide-to-useeffect/" rel="noopener noreferrer"&gt;https://overreacted.io/a-complete-guide-to-useeffect/&lt;/a&gt;&lt;br&gt;
[21] &lt;a href="https://dev.to/colocodes/6-use-cases-of-the-useeffect-reactjs-hook-282o"&gt;https://dev.to/colocodes/6-use-cases-of-the-useeffect-reactjs-hook-282o&lt;/a&gt;&lt;br&gt;
[22] &lt;a href="https://www.youtube.com/watch?v=2l23TWMZFYk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=2l23TWMZFYk&lt;/a&gt;&lt;br&gt;
[23] &lt;a href="https://brightmarbles.io/blog/useeffect-pitfalls/" rel="noopener noreferrer"&gt;https://brightmarbles.io/blog/useeffect-pitfalls/&lt;/a&gt;&lt;br&gt;
[24] &lt;a href="https://www.epicreact.dev/myths-about-useeffect" rel="noopener noreferrer"&gt;https://www.epicreact.dev/myths-about-useeffect&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>useeffect</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>USE STATE HOOK</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Wed, 04 Jun 2025 07:19:35 +0000</pubDate>
      <link>https://dev.to/srashtigupta/use-state-hook-3hpp</link>
      <guid>https://dev.to/srashtigupta/use-state-hook-3hpp</guid>
      <description>&lt;p&gt;Here’s your improved blog post with a clear explanation and practical example of useState, making it even more helpful and approachable for readers:&lt;/p&gt;




&lt;h2&gt;
  
  
  Mastering State and Immutability in React Functional Components
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why I Wrote This Post
&lt;/h3&gt;

&lt;p&gt;As I dove deeper into React development, I often found myself puzzled by how state management works in functional components—especially when dealing with complex data types like arrays and objects. I wrote this post to share what I’ve learned about using the &lt;code&gt;useState&lt;/code&gt; hook effectively, and to help you avoid common pitfalls that can trip up even experienced developers. If you’re looking to write cleaner, more efficient React code, this guide is for you!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Setting a cover image helps your post stand out on the home feed and social media!&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding State in React Functional Components
&lt;/h2&gt;

&lt;p&gt;React’s state is a powerful way to store and manage data within your components. In class components, you might use &lt;code&gt;this.state&lt;/code&gt;, but in functional components, React gives us hooks—especially the &lt;code&gt;useState&lt;/code&gt; hook.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is &lt;code&gt;useState&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;useState&lt;/code&gt; hook lets you add state to your functional components. It can hold any type of data: strings, numbers, booleans, arrays, objects, or even more complex structures[1][5][7]. Here’s how you can use it with different data types:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// String&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setList&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;      &lt;span class="c1"&gt;// Array&lt;/span&gt;
&lt;span class="kd"&gt;const&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;setObj&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;({});&lt;/span&gt;        &lt;span class="c1"&gt;// Object&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;value&lt;/strong&gt;: The current state value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;setValue&lt;/strong&gt;: The function to update that state.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Here’s a classic example to show how &lt;code&gt;useState&lt;/code&gt; works in practice—a button that counts how many times it’s clicked:&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Declare a state variable named 'count', initialized to 0&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;

      &lt;span class="nx"&gt;You&lt;/span&gt; &lt;span class="nx"&gt;clicked&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;times&lt;/span&gt;
       &lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;Click&lt;/span&gt; &lt;span class="nx"&gt;me&lt;/span&gt;


  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useState(0)&lt;/code&gt; creates a state variable &lt;code&gt;count&lt;/code&gt; with an initial value of 0.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setCount&lt;/code&gt; updates the value of &lt;code&gt;count&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Every button click increases the count by 1, and the UI updates automatically[3][4][5][6].&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Updating State
&lt;/h3&gt;

&lt;p&gt;Depending on your data type, you’ll update state like this:&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="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                &lt;span class="c1"&gt;// Number&lt;/span&gt;
&lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;newValue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                      &lt;span class="c1"&gt;// String&lt;/span&gt;
&lt;span class="nf"&gt;setIsTrue&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="c1"&gt;// Boolean&lt;/span&gt;
&lt;span class="nf"&gt;setList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newItem&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;       &lt;span class="c1"&gt;// Array&lt;/span&gt;
&lt;span class="nf"&gt;setObj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Writer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt; &lt;span class="c1"&gt;// Object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Key Principles
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Immutability:&lt;/strong&gt; Never mutate the original object or array. Always create a new copy with the necessary changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spread Operator (&lt;code&gt;...&lt;/code&gt;):&lt;/strong&gt; Use it to copy arrays and objects efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functional Updates:&lt;/strong&gt; When the new state depends on the previous state, use the functional form (e.g., &lt;code&gt;setState(prev =&amp;gt; ...)&lt;/code&gt;) for accuracy, especially with async updates.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Immutability Matters for Performance
&lt;/h2&gt;

&lt;p&gt;Creating new references with &lt;code&gt;useState&lt;/code&gt; directly supports React’s shallow comparison strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Efficient Change Detection:&lt;/strong&gt; React can quickly tell if something changed by comparing references, not deep values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimized Re-renders:&lt;/strong&gt; If the reference hasn’t changed, React skips unnecessary re-renders, improving performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized Virtual DOM Diffing:&lt;/strong&gt; Only the parts of the UI that need to change are updated.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Pitfalls with the Spread Operator
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shallow Copy Only:&lt;/strong&gt; The spread operator only copies the top level. Nested objects or arrays are still referenced, which can lead to bugs if mutated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Mutation Before Copy:&lt;/strong&gt; Accidentally mutating the original before copying (e.g., &lt;code&gt;arr.push(x)&lt;/code&gt; then &lt;code&gt;[...arr]&lt;/code&gt;) still mutates the original data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overusing Spread:&lt;/strong&gt; Excessive use can make code harder to read and, in rare cases, affect performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Order of Properties:&lt;/strong&gt; When merging objects, later properties override earlier ones—be mindful of the order.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;React’s &lt;code&gt;useState&lt;/code&gt; hook is a cornerstone for managing state in functional components. By following the principles of immutability and using the spread operator wisely, you can build robust, efficient, and bug-free applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Let’s Discuss!
&lt;/h2&gt;

&lt;p&gt;I’d love to hear from you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What challenges have you faced with state management in React?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do you have tips or best practices to share?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Any questions about immutability or the spread operator?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your thoughts in the comments below—let’s spark a great discussion!&lt;/p&gt;

&lt;p&gt;[1] &lt;a href="https://www.w3schools.com/react/react_usestate.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/react/react_usestate.asp&lt;/a&gt;&lt;br&gt;
[2] &lt;a href="https://daveceddia.com/usestate-hook-examples/" rel="noopener noreferrer"&gt;https://daveceddia.com/usestate-hook-examples/&lt;/a&gt;&lt;br&gt;
[3] &lt;a href="https://legacy.reactjs.org/docs/hooks-state.html" rel="noopener noreferrer"&gt;https://legacy.reactjs.org/docs/hooks-state.html&lt;/a&gt;&lt;br&gt;
[4] &lt;a href="https://react.dev/reference/react/useState" rel="noopener noreferrer"&gt;https://react.dev/reference/react/useState&lt;/a&gt;&lt;br&gt;
[5] &lt;a href="https://blog.logrocket.com/guide-usestate-react/" rel="noopener noreferrer"&gt;https://blog.logrocket.com/guide-usestate-react/&lt;/a&gt;&lt;br&gt;
[6] &lt;a href="https://www.freecodecamp.org/news/usestate-hook-3-different-examples/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/news/usestate-hook-3-different-examples/&lt;/a&gt;&lt;br&gt;
[7] &lt;a href="https://hygraph.com/blog/usestate-react" rel="noopener noreferrer"&gt;https://hygraph.com/blog/usestate-react&lt;/a&gt;&lt;br&gt;
[8] &lt;a href="https://www.youtube.com/watch?v=O6P86uwfdR0" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=O6P86uwfdR0&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>usestate</category>
      <category>programming</category>
    </item>
    <item>
      <title>TRANSACTIONS IN DATABASE</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Mon, 12 May 2025 09:17:30 +0000</pubDate>
      <link>https://dev.to/srashtigupta/transactions-in-database-356d</link>
      <guid>https://dev.to/srashtigupta/transactions-in-database-356d</guid>
      <description>&lt;h3&gt;
  
  
  ✅ MongoDB Transactions - Concept Overview
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What is a Transaction?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;transaction&lt;/strong&gt; in MongoDB is a group of operations (such as insert, update, delete, or read) executed together as a &lt;strong&gt;single unit of work&lt;/strong&gt;. It guarantees &lt;strong&gt;atomicity&lt;/strong&gt; — meaning either &lt;strong&gt;all operations succeed&lt;/strong&gt;, or &lt;strong&gt;none of them do&lt;/strong&gt;. This ensures &lt;strong&gt;data consistency&lt;/strong&gt; across multiple documents and collections.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚛️ Atomicity - Define
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Atomicity&lt;/strong&gt; means that a series of database operations are treated as a single unit:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Either all operations are completed successfully, or none are applied.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the context of MongoDB:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If one operation in a transaction fails, the &lt;strong&gt;entire transaction is rolled back&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;This protects your data from &lt;strong&gt;partial updates&lt;/strong&gt; or &lt;strong&gt;inconsistent states&lt;/strong&gt;, especially when working with multiple documents or collections.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔄 Key Features of MongoDB Transactions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Support for &lt;strong&gt;multi-document transactions&lt;/strong&gt; (across multiple collections and databases).&lt;/li&gt;
&lt;li&gt;Can perform &lt;strong&gt;inserts, updates, deletes&lt;/strong&gt;, and &lt;strong&gt;reads&lt;/strong&gt; within a transaction.&lt;/li&gt;
&lt;li&gt;Supports &lt;strong&gt;aggregation operations&lt;/strong&gt; (e.g., &lt;code&gt;$count&lt;/code&gt;, &lt;code&gt;$group&lt;/code&gt;) inside transactions.&lt;/li&gt;
&lt;li&gt;Supports &lt;strong&gt;distributed transactions&lt;/strong&gt; across &lt;strong&gt;sharded clusters&lt;/strong&gt; (MongoDB 4.2+).&lt;/li&gt;
&lt;li&gt;Can create collections or indexes in a transaction under specific conditions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💡 How Transactions Work
&lt;/h3&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%2Fj5mu4sql1tpi6f6myg56.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%2Fj5mu4sql1tpi6f6myg56.png" alt="Image description" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You start a transaction using a &lt;strong&gt;session&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;strong&gt;callback API&lt;/strong&gt; or &lt;strong&gt;Core API&lt;/strong&gt; to:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Start a transaction.&lt;/li&gt;
&lt;li&gt;Execute your operations.&lt;/li&gt;
&lt;li&gt;Commit or abort the transaction.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If an error (like a &lt;strong&gt;duplicate key&lt;/strong&gt;) occurs, you must &lt;strong&gt;abort the transaction&lt;/strong&gt; (&lt;code&gt;session.abortTransaction()&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The driver may automatically retry transactions if errors like &lt;code&gt;TransientTransactionError&lt;/code&gt; or &lt;code&gt;UnknownTransactionCommitResult&lt;/code&gt; occur.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚠️ Important Considerations
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ✅ Allowed Operations
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Insert/update/delete across &lt;strong&gt;multiple collections and databases&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create collections via:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First insert,&lt;/li&gt;
&lt;li&gt;Upsert operation,&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;db.createCollection()&lt;/code&gt; with readConcern set to "local".&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Create indexes on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New empty collections in the same transaction.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  🚫 Restrictions in Transactions
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;❌ No operations on &lt;code&gt;admin&lt;/code&gt;, &lt;code&gt;local&lt;/code&gt;, &lt;code&gt;config&lt;/code&gt;, or &lt;code&gt;system.*&lt;/code&gt; collections.&lt;/li&gt;
&lt;li&gt;❌ No writes to &lt;strong&gt;capped collections&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;❌ Cannot use &lt;code&gt;$graphLookup&lt;/code&gt; on &lt;strong&gt;sharded collections&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;❌ Cannot use &lt;code&gt;distinct()&lt;/code&gt; in sharded collections; use &lt;code&gt;$group + $addToSet&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;❌ No parallel/multi-threaded operations.&lt;/li&gt;
&lt;li&gt;❌ No user management commands (&lt;code&gt;createUser&lt;/code&gt;, &lt;code&gt;listCollections&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;❌ Cursors created outside the transaction cannot be used inside it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚙️ Write/Read Concerns and Preferences
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;strong&gt;write concern&lt;/strong&gt;, &lt;strong&gt;read concern&lt;/strong&gt;, and &lt;strong&gt;read preference&lt;/strong&gt; at the &lt;strong&gt;transaction level&lt;/strong&gt;, not per operation.&lt;/li&gt;
&lt;li&gt;Avoid setting write concern for individual operations inside a transaction — it causes errors.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🛠️ Production Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Transactions are &lt;strong&gt;not supported&lt;/strong&gt; on &lt;strong&gt;standalone deployments&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You must deploy MongoDB as a &lt;strong&gt;replica set&lt;/strong&gt; or a &lt;strong&gt;sharded cluster&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Distributed transactions work across shards and require careful planning for performance and consistency.&lt;/li&gt;
&lt;li&gt;For sharded clusters, avoid creating collections inside transactions unless absolutely necessary.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  📌 Summary
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;MongoDB supports &lt;strong&gt;ACID-compliant&lt;/strong&gt; transactions on replica sets and sharded clusters.&lt;/li&gt;
&lt;li&gt;Use them when you need &lt;strong&gt;reliable, consistent changes&lt;/strong&gt; across multiple documents or collections.&lt;/li&gt;
&lt;li&gt;Always test transaction behavior carefully in production environments.&lt;/li&gt;
&lt;li&gt;⚠️ Best Practice: Always wrap your transaction logic in retry logic for transient errors like &lt;code&gt;TransientTransactionError&lt;/code&gt; or &lt;code&gt;UnknownTransactionCommitResult&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💻 Simple Transaction Example (Node.js)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startTransaction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Inventory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;updateOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;book&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;$inc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;stock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commitTransaction&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Transaction committed.&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="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abortTransaction&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;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Transaction aborted due to error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endSession&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🔗 Useful Reference
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/docs/manual/core/transactions/" rel="noopener noreferrer"&gt;MongoDB Transactions Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>webperf</category>
      <category>nosql</category>
    </item>
    <item>
      <title>Mastering Date &amp; Time Manipulation in JavaScript (Node.js)</title>
      <dc:creator>Srashti Gupta</dc:creator>
      <pubDate>Wed, 12 Mar 2025 12:31:31 +0000</pubDate>
      <link>https://dev.to/srashtigupta/mastering-date-time-manipulation-in-javascript-nodejs-mh</link>
      <guid>https://dev.to/srashtigupta/mastering-date-time-manipulation-in-javascript-nodejs-mh</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In JavaScript (and Node.js), managing dates and times is a common and crucial task. Whether you are building a time-sensitive application or handling user data with expiration timestamps, understanding how to manipulate and compare dates is essential.&lt;/p&gt;

&lt;p&gt;In this article, we’ll explore several JavaScript &lt;code&gt;Date&lt;/code&gt; methods that can help you handle timestamps, compare expiration times, and work with dates effectively.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding JavaScript Date Methods
&lt;/h2&gt;

&lt;p&gt;JavaScript provides several ways to work with dates and times. Below are some of the most useful methods you will frequently use when working with date and time values.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;Date.now()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Date.now()&lt;/code&gt; method returns the number of milliseconds that have elapsed since &lt;strong&gt;January 1, 1970, 00:00:00 UTC&lt;/strong&gt; (also known as the Unix Epoch).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;currentMilliseconds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&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;currentMilliseconds&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Example Output: 1678595739816&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This method is often used when you need the current timestamp, and it's fast since it doesn’t require creating a &lt;code&gt;Date&lt;/code&gt; object.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;Date.parse()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Date.parse()&lt;/code&gt; method takes a date string as input and returns the number of milliseconds since the Unix Epoch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timeInMillis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12T00:00:00Z&lt;/span&gt;&lt;span class="dl"&gt;'&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;timeInMillis&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Example Output: 1678598400000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is particularly useful for converting a string representation of a date into a timestamp.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;Date.UTC()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Date.UTC()&lt;/code&gt; method accepts year, month, day, hours, minutes, and seconds as arguments and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;utcTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2025&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="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Note: Month is 0-indexed, so 2 is March&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;utcTime&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Example Output: 1678588800000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful for working with dates in the UTC time zone.&lt;/p&gt;




&lt;h2&gt;
  
  
  Instance Methods on Date Objects
&lt;/h2&gt;

&lt;p&gt;Once you create a &lt;code&gt;Date&lt;/code&gt; object, you can use several instance methods to extract different components of the date, compare times, and manipulate them.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;getDate()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;getDate()&lt;/code&gt; method returns the day of the month from a given &lt;code&gt;Date&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12&lt;/span&gt;&lt;span class="dl"&gt;'&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;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: 12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. &lt;code&gt;getDay()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;getDay()&lt;/code&gt; method returns the day of the week as a number from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;6&lt;/code&gt;, where &lt;code&gt;0&lt;/code&gt; represents Sunday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12&lt;/span&gt;&lt;span class="dl"&gt;'&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;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDay&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: 3 (Wednesday)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. &lt;code&gt;getFullYear()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;getFullYear()&lt;/code&gt; method returns the full year from the &lt;code&gt;Date&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12&lt;/span&gt;&lt;span class="dl"&gt;'&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;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getFullYear&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: 2025&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. &lt;code&gt;getHours()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;getHours()&lt;/code&gt; method returns the hour of the day (0-23) from the given &lt;code&gt;Date&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12T10:45:00Z&lt;/span&gt;&lt;span class="dl"&gt;'&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;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: 10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8. &lt;code&gt;getMilliseconds()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;getMilliseconds()&lt;/code&gt; method returns the milliseconds (0-999) of the &lt;code&gt;Date&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12T10:45:00.456Z&lt;/span&gt;&lt;span class="dl"&gt;'&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;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMilliseconds&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: 456&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9. &lt;code&gt;getMinutes()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;getMinutes()&lt;/code&gt; method returns the minutes (0-59) of the &lt;code&gt;Date&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12T10:45:00Z&lt;/span&gt;&lt;span class="dl"&gt;'&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;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMinutes&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: 45&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  10. &lt;code&gt;getTime()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;getTime()&lt;/code&gt; method returns the time (in milliseconds) since January 1, 1970, 00:00:00 UTC for the &lt;code&gt;Date&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12&lt;/span&gt;&lt;span class="dl"&gt;'&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;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: 1678588800000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Comparing Dates and Expiration Times
&lt;/h2&gt;

&lt;p&gt;Often in applications, you'll need to check if a certain date or timestamp has expired. This can be achieved by comparing the current time with the expiration time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Checking if a token has expired
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expirationTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2025-03-12T12:00:00Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;getTime&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;currentTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;expirationTime&lt;/span&gt;&lt;span class="p"&gt;)&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The token has expired&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="k"&gt;else&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The token is still valid&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we compare the &lt;code&gt;currentTime&lt;/code&gt; (from &lt;code&gt;Date.now()&lt;/code&gt;) with a predefined &lt;code&gt;expirationTime&lt;/code&gt; to determine if the token has expired.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this article, we've covered how to handle dates and times in JavaScript using a variety of methods. From simple timestamps to more complex date manipulations, these methods will help you work with dates effectively, whether you’re checking expiration times or dealing with time-sensitive data in your Node.js applications.&lt;/p&gt;

&lt;p&gt;Feel free to experiment with these methods, and let me know if you have any questions or need further examples!&lt;/p&gt;




</description>
      <category>javascript</category>
      <category>node</category>
      <category>timestamps</category>
      <category>javascriptdate</category>
    </item>
  </channel>
</rss>
