<?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: Marcin Dziewulski</title>
    <description>The latest articles on DEV Community by Marcin Dziewulski (@mobily).</description>
    <link>https://dev.to/mobily</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%2F749114%2Fed8a6270-08ec-40d0-84d5-6fb13dca40c2.jpeg</url>
      <title>DEV Community: Marcin Dziewulski</title>
      <link>https://dev.to/mobily</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mobily"/>
    <language>en</language>
    <item>
      <title>TS Belt - fast, modern, and practical utility library for FP in TypeScript</title>
      <dc:creator>Marcin Dziewulski</dc:creator>
      <pubDate>Mon, 06 Dec 2021 20:17:46 +0000</pubDate>
      <link>https://dev.to/mobily/ts-belt-fast-modern-and-practical-utility-library-for-fp-in-typescript-25b5</link>
      <guid>https://dev.to/mobily/ts-belt-fast-modern-and-practical-utility-library-for-fp-in-typescript-25b5</guid>
      <description>&lt;p&gt;&lt;a href="https://media.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%2F72zizllqdz53a0e5f5ij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F72zizllqdz53a0e5f5ij.png" alt="ts-belt - fast, modern, and practical utility library for FP in TypeScript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/mobily/ts-belt" rel="noopener noreferrer"&gt;https://github.com/mobily/ts-belt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://mobily.github.io/ts-belt/" rel="noopener noreferrer"&gt;https://mobily.github.io/ts-belt/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;After a few intensive months of after-hours work, I have finally published a new version of &lt;code&gt;ts-belt&lt;/code&gt; (v3). As stated in the post title, &lt;strong&gt;TS Belt&lt;/strong&gt; is a fast, modern, and practical utility library for functional programming in TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Background
&lt;/h2&gt;

&lt;p&gt;TS Belt has been built in &lt;a href="https://rescript-lang.org/" rel="noopener noreferrer"&gt;ReScript&lt;/a&gt; (and its &lt;a href="https://rescript-lang.org/docs/manual/latest/api/belt" rel="noopener noreferrer"&gt;Belt&lt;/a&gt; stdlib). ReScript generates highly performant JavaScript code, as well as it automatically generates TypeScript types with &lt;a href="https://rescript-lang.org/docs/gentype/latest/introduction" rel="noopener noreferrer"&gt;genType&lt;/a&gt;. Moreover, I've added a few codemods to the building process to provide even more code optimizations and cleaner TypeScript signatures. &lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;If you're into FP and use TypeScript on a daily basis work, I assume you know at least one of these: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ramda&lt;/li&gt;
&lt;li&gt;Rambda&lt;/li&gt;
&lt;li&gt;Remeda&lt;/li&gt;
&lt;li&gt;lodash/fp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of them follow FP principles: &lt;code&gt;pipe&lt;/code&gt; operator, immutable data, no side-effects, etc. TS Belt does the same, however it provides the &lt;code&gt;data-first&lt;/code&gt; approach for a single function call, which feels more natural, makes your code more readable and it’s much more developer-friendly, and the data-last approach for usage within the pipeline. Take a look at the following examples to see the difference:&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;// ⬇️ ts-belt → single function call&lt;/span&gt;
&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&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;=&amp;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;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// ⬇️ ramda/rambda → single function call&lt;/span&gt;
&lt;span class="nf"&gt;map&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;=&amp;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;3&lt;/span&gt;&lt;span class="p"&gt;,&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;// ⬇️ ts-belt → pipe&lt;/span&gt;
&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&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="nf"&gt;filter&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;=&amp;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="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;A&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&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;=&amp;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;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// ⬇️ ramda/rambda → pipe&lt;/span&gt;
&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nf"&gt;filter&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;=&amp;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="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="nf"&gt;map&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;=&amp;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;3&lt;/span&gt;&lt;span class="p"&gt;),&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;// ⬇️ lodash/fp → pipe&lt;/span&gt;
&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;flow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&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;=&amp;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="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;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&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;=&amp;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;3&lt;/span&gt;&lt;span class="p"&gt;),&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="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;Last but not least, TS Belt provides two interesting implementations of data types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://mobily.github.io/ts-belt/api/option" rel="noopener noreferrer"&gt;Option&lt;/a&gt; - represents the existence and nonexistence of a value by wrapping it with the Option type&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mobily.github.io/ts-belt/api/result" rel="noopener noreferrer"&gt;Result&lt;/a&gt; - describes the result of a certain operation without relying on exceptions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;TS Belt is super fast, and I really mean it, it's even faster than the fastest library so far, Rambda.&lt;/p&gt;

&lt;p&gt;Sample results (tested on MacBook Pro, M1 Pro, 2021):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;map &lt;span class="o"&gt;(&lt;/span&gt;single &lt;span class="k"&gt;function &lt;/span&gt;call&lt;span class="o"&gt;)&lt;/span&gt;

✔  @mobily/ts-belt  82,703,682.92  ops/sec  ±0.83%  &lt;span class="o"&gt;(&lt;/span&gt;96 runs&lt;span class="o"&gt;)&lt;/span&gt;  fastest
✔  remeda            2,966,512.35  ops/sec  ±1.53%  &lt;span class="o"&gt;(&lt;/span&gt;92 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-96&lt;/span&gt;.41%
✔  ramda            19,918,582.19  ops/sec  ±0.55%  &lt;span class="o"&gt;(&lt;/span&gt;97 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-75&lt;/span&gt;.92%
✔  rambda           81,584,073.11  ops/sec  ±0.88%  &lt;span class="o"&gt;(&lt;/span&gt;87 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-1&lt;/span&gt;.35%
✔  lodash/fp        13,133,226.26  ops/sec  ±0.59%  &lt;span class="o"&gt;(&lt;/span&gt;99 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-84&lt;/span&gt;.12%

filter &lt;span class="o"&gt;(&lt;/span&gt;single &lt;span class="k"&gt;function &lt;/span&gt;call&lt;span class="o"&gt;)&lt;/span&gt;

✔  @mobily/ts-belt  48,676,101.83  ops/sec  ±0.29%  &lt;span class="o"&gt;(&lt;/span&gt;100 runs&lt;span class="o"&gt;)&lt;/span&gt;  fastest
✔  remeda            2,588,688.05  ops/sec  ±1.49%  &lt;span class="o"&gt;(&lt;/span&gt;98 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-94&lt;/span&gt;.68%
✔  ramda            16,662,990.83  ops/sec  ±0.78%  &lt;span class="o"&gt;(&lt;/span&gt;97 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-65&lt;/span&gt;.77%
✔  rambda           46,443,339.53  ops/sec  ±1.91%  &lt;span class="o"&gt;(&lt;/span&gt;99 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-4&lt;/span&gt;.59%
✔  lodash/fp         6,620,795.22  ops/sec  ±0.79%  &lt;span class="o"&gt;(&lt;/span&gt;96 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-86&lt;/span&gt;.40%

reduce &lt;span class="o"&gt;(&lt;/span&gt;single &lt;span class="k"&gt;function &lt;/span&gt;call&lt;span class="o"&gt;)&lt;/span&gt;

✔  @mobily/ts-belt  44,890,901.88  ops/sec  ±0.17%  &lt;span class="o"&gt;(&lt;/span&gt;102 runs&lt;span class="o"&gt;)&lt;/span&gt;  fastest
✔  remeda            2,660,391.00  ops/sec  ±0.82%  &lt;span class="o"&gt;(&lt;/span&gt;99 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-94&lt;/span&gt;.07%
✔  ramda            10,199,240.77  ops/sec  ±0.65%  &lt;span class="o"&gt;(&lt;/span&gt;97 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-77&lt;/span&gt;.28%
✔  rambda           15,497,091.42  ops/sec  ±1.86%  &lt;span class="o"&gt;(&lt;/span&gt;92 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-65&lt;/span&gt;.48%
✔  lodash/fp         9,658,372.21  ops/sec  ±1.08%  &lt;span class="o"&gt;(&lt;/span&gt;100 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-78&lt;/span&gt;.48%

groupBy &lt;span class="o"&gt;(&lt;/span&gt;single &lt;span class="k"&gt;function &lt;/span&gt;call&lt;span class="o"&gt;)&lt;/span&gt;

✔  @mobily/ts-belt  6,453,084.49  ops/sec  ±0.14%  &lt;span class="o"&gt;(&lt;/span&gt;97 runs&lt;span class="o"&gt;)&lt;/span&gt;  fastest
✔  remeda           1,783,616.20  ops/sec  ±1.05%  &lt;span class="o"&gt;(&lt;/span&gt;95 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-72&lt;/span&gt;.36%
✔  ramda            1,667,720.10  ops/sec  ±1.30%  &lt;span class="o"&gt;(&lt;/span&gt;93 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-74&lt;/span&gt;.16%
✔  rambda           6,100,470.04  ops/sec  ±1.29%  &lt;span class="o"&gt;(&lt;/span&gt;94 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-5&lt;/span&gt;.46%
✔  lodash/fp        3,123,622.49  ops/sec  ±0.89%  &lt;span class="o"&gt;(&lt;/span&gt;97 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-51&lt;/span&gt;.59%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;map → filter → reduce

✔  @mobily/ts-belt  254,251.22  ops/sec  ±0.20%  &lt;span class="o"&gt;(&lt;/span&gt;99 runs&lt;span class="o"&gt;)&lt;/span&gt;   fastest
✔  remeda            25,231.20  ops/sec  ±1.76%  &lt;span class="o"&gt;(&lt;/span&gt;92 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-90&lt;/span&gt;.08%
✔  ramda            131,950.08  ops/sec  ±0.41%  &lt;span class="o"&gt;(&lt;/span&gt;98 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-48&lt;/span&gt;.10%
✔  rambda           250,385.53  ops/sec  ±0.39%  &lt;span class="o"&gt;(&lt;/span&gt;102 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-1&lt;/span&gt;.52%
✔  lodash/fp         66,034.82  ops/sec  ±0.71%  &lt;span class="o"&gt;(&lt;/span&gt;98 runs&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="nt"&gt;-74&lt;/span&gt;.03%

deepFlat → &lt;span class="nb"&gt;uniq&lt;/span&gt; → groupBy

✔  @mobily/ts-belt  2,297,096.07  ops/sec  ±0.20%  &lt;span class="o"&gt;(&lt;/span&gt;99 runs&lt;span class="o"&gt;)&lt;/span&gt;  fastest
✔  remeda             494,070.92  ops/sec  ±2.33%  &lt;span class="o"&gt;(&lt;/span&gt;98 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-78&lt;/span&gt;.49%
✔  ramda              281,192.43  ops/sec  ±0.97%  &lt;span class="o"&gt;(&lt;/span&gt;93 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-87&lt;/span&gt;.76%
✔  rambda           1,767,868.03  ops/sec  ±1.10%  &lt;span class="o"&gt;(&lt;/span&gt;98 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-23&lt;/span&gt;.04%
✔  lodash/fp          528,949.75  ops/sec  ±1.15%  &lt;span class="o"&gt;(&lt;/span&gt;98 runs&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="nt"&gt;-76&lt;/span&gt;.97%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full benchmark results can be found here: &lt;a href="https://mobily.github.io/ts-belt/benchmarks/introduction" rel="noopener noreferrer"&gt;https://mobily.github.io/ts-belt/benchmarks/introduction&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;To install &lt;code&gt;ts-belt&lt;/code&gt; use either &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add @mobily/ts-belt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @mobily/ts-belt &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Comments
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TS Belt&lt;/strong&gt; combines all of the good things you can find in other similar libraries: the developer-friendly data-first approach, good-looking and detailed documentation, great TypeScript support, and it's fast! 🚀&lt;/p&gt;

&lt;p&gt;Let me know if you're willing to use &lt;code&gt;ts-belt&lt;/code&gt; in your project! Also, don't forget to give a star to &lt;code&gt;ts-belt&lt;/code&gt; on &lt;a href="https://github.com/mobily/ts-belt" rel="noopener noreferrer"&gt;Github&lt;/a&gt;. Any feedback or suggestions are appreciated as well.&lt;/p&gt;

&lt;p&gt;Happy coding! 😊 &lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>functional</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
