{"id":9998,"date":"2022-03-10T19:12:15","date_gmt":"2022-03-10T18:12:15","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/"},"modified":"2022-09-19T13:16:31","modified_gmt":"2022-09-19T11:16:31","slug":"frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/","title":{"rendered":"Frontend Thursday vol. 78 &#8211; to ju\u017c koniec TypeScript! &#8211; typy trafi\u0105 do JavaScript"},"content":{"rendered":"\n<h2 id=\"1-to-juz-koniec-typescript-typy-trafia-do-javascript\" data-num=1>1. To ju\u017c koniec TypeScript! &#8211; typy trafi\u0105 do JavaScript<\/h2>\n\n\n\n<p>No dobra &#8211; na razie nie wiadomo czy i je\u015bli tak to kiedy tytu\u0142owe typy trafi\u0105 do JavaScript. R\u00f3wnie\u017c szanse na to, \u017ce ich pojawienie si\u0119 zako\u0144czy \u017cywot TypeScriptu s\u0105 raczej nik\u0142e. Musicie jednak przyzna\u0107, \u017ce uda\u0142o mi si\u0119 przyci\u0105gn\u0105\u0107 Wasz\u0105 uwag\u0119. Wykorzystajmy ten fakt i przyjrzyjmy si\u0119 dok\u0142adniej szalonemy pomys\u0142owi dodania typ\u00f3w do JavaScriptu na jaki wpad\u0142 Microsoft.<\/p>\n\n\n\n<p>Proposal, kt\u00f3ry zaprezentowa\u0142 Microsoft, dodaje do JavaScriptu sk\u0142adni\u0119 typ\u00f3w bli\u017aniaczo podobn\u0105 do tej znanej z TypeScript. Magiczny trik umo\u017cliwiaj\u0105cy wzgl\u0119dn\u0105 kompatybilno\u015b\u0107 polega na tym, \u017ce interpreter traktowa\u0142 b\u0119dzie typy w ten sam spos\u00f3b w jaki traktuje komentarze &#8211; kompletnie je ignoruj\u0105c. Je\u015bli z ty\u0142u g\u0142owy ko\u0142acze si\u0119 Wam my\u015bl, \u017ce kto\u015b kiedy\u015b zrobi\u0142 ju\u017c co\u015b podobnego, to python wykorzystuje typy w bardzo podobny spos\u00f3b. R\u00f3\u017cnica polega na tym, \u017ce python udost\u0119pnia cz\u0119\u015b\u0107 metadanych o typach w runtime, natomiast JavaScript mia\u0142by pozbywa\u0107 si\u0119 ich kompletnie.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"526\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-today-proposed-1024x526.jpg\" alt=\"\" class=\"wp-image-4010\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-today-proposed-1024x526.jpg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-today-proposed-300x154.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-today-proposed-768x395.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-today-proposed.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p>To, \u017ce typy b\u0119d\u0105 ignorowane przez interpreter nie oznacza, \u017ce my deweloperzy nie skorzystamy z ich obecno\u015bci. Podobnie jak ma to miejsce przy korzystaniu JSDoc, tak i tutaj do IDE i narz\u0119dzi deweloperskich mo\u017cliwe b\u0119dzie podpi\u0119cie type-checkera, kt\u00f3ry ostrzega\u0142 nas b\u0119dzie przed b\u0142\u0119dami. Cz\u0119\u015b\u0107 deweloper\u00f3w twierdzi r\u00f3wnie\u017c, \u017ce samo dodanie typ\u00f3w sprawia, \u017ce kod jest znacznie czytelniejszy. Ja osobi\u015bcie mocno si\u0119 z nimi nie zgadzam, bo typy bez podpi\u0119tego type-checkera s\u0105 dla mnie oczywistym strza\u0142em w kolano.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"478\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-checking-behavior-1024x478.jpg\" alt=\"\" class=\"wp-image-4011\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-checking-behavior-1024x478.jpg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-checking-behavior-300x140.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-checking-behavior-768x358.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-checking-behavior.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p>Warto zwr\u00f3ci\u0107 r\u00f3wnie\u017c uwag\u0119 na r\u00f3\u017cnice pomi\u0119dzy proponowanym formatem, a znanym ju\u017c JSDoc. Po pierwsze proponowany przez Microsoft format jest znacznie zwi\u0119\u017alejszy i czytelniejszy ni\u017c JSDoc. Po drugie mo\u017cliwo\u015bci JSDoc s\u0105 mocno ograniczone (za jego pomoc\u0105 ci\u0119\u017cko jest zdefiniowa\u0107 chocia\u017cby generyki) i nowy format ma pozbywa\u0107 si\u0119 tych ogranicze\u0144.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/**\n * @param {string}  p1 - A string param.\n * @param {string=} p2 - An optional param (Closure syntax)\n * @param {string} [p3] - Another optional param (JSDoc syntax).\n * @param {string} [p4=&quot;test&quot;] - An optional param with a default value\n * @return {string} This is the result\n *\/\nfunction stringsStringStrings(p1, p2, p3, p4) {\n    \/\/ TODO\n}\n\nfunction stringsStringStrings(p1: string, p2?: string, p3?: string, p4 = &quot;test&quot;): string {\n    \/\/ TODO\n}<\/code><\/pre>\n\n\n\n<p>Proposal na razie jest dopiero na etapie zerowym, wi\u0119c raczej nie nale\u017cy mocno przywi\u0105zywa\u0107 si\u0119 do jego tre\u015bci. Zanim dotrze do kolejnych etap\u00f3w jego tre\u015b\u0107 zmieni si\u0119 zapewne jeszcze wielokrotnie. Zgodnie z jego tre\u015bci\u0105 do JavaScript mia\u0142oby trafi\u0107 wi\u0119kszo\u015b\u0107 funkcjonalno\u015bci zwi\u0105zanych z typami jakie znamy z TypeScript(w tym generyki i union oraz intersection types!). \u0141atwiej b\u0119dzie wi\u0119c wymieni\u0107 funkcjonalno\u015bci,&nbsp; kt\u00f3re nie b\u0119d\u0105 wspierane, a s\u0105 to enumy, namespaces, parameter properties oraz JSX. No c\u00f3\u017c, nie mo\u017cna mie\u0107 wszystkiego.<\/p>\n\n\n\n<p>Przegl\u0105daj\u0105c opinie deweloper\u00f3w na twitterze i reddicie nie spos\u00f3b nie odnie\u015b\u0107 wra\u017cenia, \u017ce spo\u0142eczno\u015b\u0107 jest wr\u0119cz zakochana w proposalu Microsoftu. Zreszt\u0105 nic dziwnego, bo statyczne typowanie JavaScriptu wed\u0142ug State of JS od lat by\u0142o najbardziej oczekiwan\u0105 przez deweloper\u00f3w funkcjonalno\u015bci\u0105 JavaScript. Ja z przykro\u015bci\u0105 musz\u0119 przyzna\u0107 si\u0119, \u017ce nie p\u0142yn\u0119 wraz z spo\u0142eczno\u015bci\u0105 na tej fali zachwytu. Wsp\u00f3\u0142czesny kod aplikacji klienckich bezwzgl\u0119dnie wymaga transpilacji i minifikacji, kt\u00f3ra sprawi, \u017ce typy znikn\u0105. Na usprawnieniach mogliby\u015bmy skorzysta\u0107 w trakcie developmentu, ale dost\u0119pne ju\u017c dzi\u015b source mapy zaspokajaj\u0105 moje potrzeby. Do tego z typ\u00f3w w JavaScript nie skorzystaj\u0105 najwi\u0119ksze dost\u0119pne frameworki, bo te albo wykorzystuj\u0105 JSX, albo wymagaj\u0105 kompilacji, albo nawet wymuszaj\u0105 korzystanie z TypeScript. Typy w TypeScript oka\u017c\u0105 si\u0119 wi\u0119c przydatne w niewielkich projektach, kt\u00f3re nie wymagaj\u0105 kompatybilno\u015bci wstecznej przegl\u0105darek.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"889\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685xpi.jpeg\" alt=\"\" class=\"wp-image-3999\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685xpi.jpeg 889w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685xpi-300x169.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685xpi-768x432.jpeg 768w\" sizes=\"auto, (max-width: 889px) 100vw, 889px\" \/><\/figure><\/div>\n\n\n\n<p>Nie zrozumcie mnie \u017ale &#8211; nie jestem przeciwnikiem typ\u00f3w w JavaScript. Z pewno\u015bci\u0105 znajd\u0105 one swoje nisze, takie jak na przyk\u0142ad aplikacje serwerowe, w kt\u00f3rych nie liczy si\u0119 rozmiar wynikowych plik\u00f3w. Ja po prostu nie potrafi\u0119 si\u0119 nimi zachwyci\u0107, bo wszystko czego<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"432\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685y95.jpeg\" alt=\"\" class=\"wp-image-4000\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685y95.jpeg 577w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685y95-300x225.jpeg 300w\" sizes=\"auto, (max-width: 577px) 100vw, 577px\" \/><\/figure><\/div>\n\n\n\n<p>Jak ju\u017c wspominali\u015bmy proposal jest na razie na etapie zerowym i Microsoft ma zamiar przedstawi\u0107 go TC39 Meeting na najbli\u017cszym spotkaniu. Patrz\u0105c na reakcj\u0119 spo\u0142eczno\u015bci proposal ten raczej trafi do kolejnych etap\u00f3w. Znaj\u0105c jednak tempo proces\u00f3w TC39, to typy do oficjalnej specyfikacji trafi\u0105 najwcze\u015bniej za kilka lat i to pod postaci\u0105 mocno zmienion\u0105 wzgl\u0119dem zaprezentowanego w tym tygodniu szkicu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p> <a href=\"https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/\">https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/<\/a><br> <a href=\"https:\/\/github.com\/giltayar\/proposal-types-as-comments\/\">https:\/\/github.com\/giltayar\/proposal-types-as-comments\/<\/a><\/p>\n\n\n\n<h2 id=\"2-typescript-4-6\" data-num=2>2. TypeScript 4.6<\/h2>\n\n\n\n<p>Ostatnie tygodnie w Microsoft musia\u0142y by\u0107 bardzo pracowite, bo opr\u00f3cz wspomnianego w poprzednim akapicie proposala w minionym tygodniu wydany zosta\u0142 r\u00f3wnie\u017c TypeScript 4.6. Ja jak zwykle polecam notatk\u0119 przygotowan\u0105 przez Microsoft, bo standardowo ju\u017c jest ona najwy\u017cszej jako\u015bci. Tych, kt\u00f3rzy oczekuj\u0105 telegraficznego skr\u00f3tu najwa\u017cniejszych zmian, zapraszam natomiast poni\u017cej.<\/p>\n\n\n\n<p>Jedn\u0105 z ciekawszych nowo\u015bci jest naprawa drobnej niekompatybilno\u015bci pomi\u0119dzy JavaScriptem i TypeScriptem. Ten pierwszy w konstruktorze klasy umo\u017cliwia umieszczenie fragmentu kodu przed wywo\u0142aniem super, pod warunkiem \u017ce fragment ten nie odwo\u0142uje si\u0119 do this. TypeScript do tej pory na etapie kompilacji wymaga\u0142, aby wywo\u0142anie super by\u0142o pierwsz\u0105 akcj\u0105 wywo\u0142ywan\u0105 w konstruktorze. Od wersji 4.6 zachowanie to ma zosta\u0107 usp\u00f3jnione.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">class Base {\n    \/\/ ...\n}\n\nclass Derived extends Base {\n    someProperty = true;\n\n    constructor() {\n        \/\/ previously: error! have to call &#039;super()&#039; first because it needs to initialize &#039;someProperty&#039;.\n        doSomeStuff();\n        super();\n    }\n}<\/code><\/pre>\n\n\n\n<p>Druga interesuj\u0105ca zmiana te\u017c jest w pewnym stopniu napraw\u0105 istniej\u0105cego ju\u017c b\u0142\u0119du. Gdy kompilator sprawdza czy dwa typy mog\u0105 zosta\u0107 do siebie przypisane, to przy osi\u0105gni\u0119ciu odpowiedniego poziomu rekurencji zak\u0142ada on, \u017ce typy s\u0105 kompatybilne. Mimo, \u017ce na pierwszy rzut oka wygl\u0105da to przera\u017caj\u0105co, po g\u0142\u0119bszym zastanowieniu logika ta ma oczywi\u015bcie sporo sensu. Ze wzgl\u0119du na zastosowanie strukturalnego typowanie,&nbsp; niemo\u017cliwe jest por\u00f3wnanie definicji obiekt\u00f3w, co stanowi wyzwanie w sytuacji, gdy poprzez odpowiednie zastosowanie generyk\u00f3w da si\u0119 zdefiniowa\u0107 klas\u0119 o niesko\u0144czonej definicji. Usprawnienie, kt\u00f3re przygotowa\u0142 Microsoft nie rozwi\u0105zuje ca\u0142kowicie problem\u00f3w strukturalnego typowania, ale sprawia \u017ce TypeScript w niekt\u00f3rych przypadkach b\u0119dzie w stanie wykry\u0107 niekompatybilno\u015bci pomi\u0119dzy dwoma bardzo zagnie\u017cd\u017conymi typami.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">interface Source&lt;T&gt; {\n    prop: Source&lt;Source&lt;T&gt;&gt;;\n}\n\ninterface Target&lt;T&gt; {\n    prop: Target&lt;Target&lt;T&gt;&gt;;\n}\n\nfunction check(source: Source&lt;string&gt;, target: Target&lt;number&gt;) {\n    \/\/ Resolving those types structure will result in an infinite loop. \n    \/\/ Because of that compiler uses depth heuristic\n    target = source;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">interface Foo&lt;T&gt; {\n    prop: T;\n}\n\ndeclare let x: Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;string&gt;&gt;&gt;&gt;&gt;&gt;;\ndeclare let y: Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;string&gt;&gt;&gt;&gt;&gt;;\n\n\/\/ In TypeScript 4.5 this will work ok. In TypeScript 4.6 compiler will return error\nx = y;<\/code><\/pre>\n\n\n\n<p>Ostatni\u0105 interesuj\u0105c\u0105 nowo\u015bci\u0105 jest lepsze wsparcie dla typ\u00f3w zale\u017cnych. Co tu du\u017co m\u00f3wi\u0107, ma\u0142a rzecz, a cieszy.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">type Func = (...args: [&quot;a&quot;, number] | [&quot;b&quot;, string]) =&gt; void;\n\nconst f1: Func = (kind, payload) =&gt; {\n    if (kind === &quot;a&quot;) {\n        payload.toFixed();  \/\/ &#039;payload&#039; narrowed to &#039;number&#039;\n    }\n    if (kind === &quot;b&quot;) {\n        payload.toUpperCase();  \/\/ &#039;payload&#039; narrowed to &#039;string&#039;\n    }\n};\n\nf1(&quot;a&quot;, 42);\nf1(&quot;b&quot;, &quot;hello&quot;);<\/code><\/pre>\n\n\n\n<p>Tak jak wspomina\u0142em ju\u017c przy okazji premiery wersji beta TypeScript 4.6, kolejne wydania tego j\u0119zyka od jakiego\u015b czasu ekscytuj\u0105 mnie coraz mniej. Nie odbieram tego jednak negatywnie, bo \u015bwiadczy to o dojrza\u0142o\u015bci jak\u0105 uda\u0142o mu si\u0119 osi\u0105gn\u0105\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p> <blockquote class=\"wp-embedded-content\" data-secret=\"HRq9ppbJ5V\"><a href=\"https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-4-6\/\">Announcing TypeScript 4.6<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Announcing TypeScript 4.6&#8221; &#8212; TypeScript\" src=\"https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-4-6\/embed\/#?secret=E77gBxqqVp#?secret=HRq9ppbJ5V\" data-secret=\"HRq9ppbJ5V\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n\n\n\n<h2 id=\"3-react-18-release-candidate\" data-num=3>3. React 18 Release Candidate<\/h2>\n\n\n\n<p>React 18 zbli\u017ca si\u0119 wielkimi krokami bo w minionym tygodniu ukaza\u0142a si\u0119 jego pierwsza wersja RC. Dok\u0142adnej analizy nowych funkcjonalno\u015bci mo\u017cecie spodziewa\u0107 si\u0119 przy okazji wydania stabilnej wersji. Tymczasem wspomn\u0119 tylko, \u017ce jest na co czeka\u0107, bo do nowego Reacta zmierzaj\u0105 zmiany do Server Renderig API, usprawniony batching renderowania przy zmianie stanu oraz nowe API dla zewn\u0119trznych bibliotek. No i React wreszcie porzuca r\u00f3wnie\u017c wsparcie dla IE11. Trzymam tylko kciuki, \u017ce faza RC potrwa kr\u00f3cej ni\u017c beta, kt\u00f3ra trwa\u0142a ponad 5 miesi\u0119cy.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"317\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-21.gif\" alt=\"\" class=\"wp-image-4002\"\/><figcaption>Autor frontendowego czwartku czekaj\u0105cy na release React 18<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p> <a href=\"https:\/\/reactjs.org\/blog\/2022\/03\/08\/react-18-upgrade-guide.html\">https:\/\/reactjs.org\/blog\/2022\/03\/08\/react-18-upgrade-guide.html<\/a><\/p>\n\n\n\n<h2 id=\"4-nowe-szaty-mdn-docs\" data-num=4>4. Nowe szaty MDN Docs<\/h2>\n\n\n\n<p>Najpopularniejsza dokumentacja JavaScript nieco ponad tydzie\u0144 doczeka\u0142a si\u0119 wizualnego od\u015bwie\u017cenia. Opr\u00f3cz zupe\u0142nie nowego ostylowania strony, usprawniona zosta\u0142a r\u00f3wnie\u017c nawigacja oraz zaprezentowane zosta\u0142o nowe logo. Jednym zaprezentowane zmiany przypad\u0142y do gustu, inni natomiast twierdz\u0105, \u017ce jest to krok w ty\u0142. Wszyscy jednak zgadzamy si\u0119, \u017ce dodanie wsparcia dla ciemnego motywu to tak zwany killer feature.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"575\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-1024x575.png\" alt=\"\" class=\"wp-image-4004\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-1024x575.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-300x168.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-768x431.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-1536x862.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-2048x1149.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Troch\u0119 obok nowej warstwy wizualnej zapowiedziany zosta\u0142 MDN Plus, czyli p\u0142atna subskrypcja w ramach kt\u00f3rej dost\u0119pne b\u0119d\u0105 dodatkowe funkcjonalno\u015bci. Na razie nie wiadomo jakie b\u0119d\u0105 to funkcjonalno\u015bci, ale ja z ciekawo\u015bci\u0105 b\u0119d\u0119 \u015bledzi\u0142 na jakie pomys\u0142y wpad\u0142 zesp\u00f3\u0142 MDN.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"430\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-02-24-at-10.45.53.png\" alt=\"\" class=\"wp-image-4005\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-02-24-at-10.45.53.png 372w, https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-02-24-at-10.45.53-260x300.png 260w\" sizes=\"auto, (max-width: 372px) 100vw, 372px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p> <a href=\"https:\/\/hacks.mozilla.org\/2022\/03\/a-new-year-a-new-mdn\/\">https:\/\/hacks.mozilla.org\/2022\/03\/a-new-year-a-new-mdn\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W minionym tygodniu naprawd\u0119 sporo si\u0119 dzia\u0142o (w jednym tygodniu pojawi\u0142 si\u0119 zar\u00f3wno nowy React jak i TypeScript), wi\u0119c bez zb\u0119dnego przed\u0142u\u017cania \u0142apcie gor\u0105c\u0105 herbat\u0119 i zapraszamy do lektury!<\/p>\n","protected":false},"author":12,"featured_media":7981,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-9998","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/FRONTEND.png","feature_image_visible":false,"estimated_reading_time":"7"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Frontend Thursday vol. 78 - to ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 78 - to ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript - Vived\" \/>\n<meta property=\"og:description\" content=\"W minionym tygodniu naprawd\u0119 sporo si\u0119 dzia\u0142o (w jednym tygodniu pojawi\u0142 si\u0119 zar\u00f3wno nowy React jak i TypeScript), wi\u0119c bez zb\u0119dnego przed\u0142u\u017cania \u0142apcie gor\u0105c\u0105 herbat\u0119 i zapraszamy do lektury!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-10T18:12:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/FRONTEND.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Borowicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/FRONTEND.png\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 78 &#8211; to ju\u017c koniec TypeScript! &#8211; typy trafi\u0105 do JavaScript\",\"datePublished\":\"2022-03-10T18:12:15+00:00\",\"dateModified\":\"2022-09-19T11:16:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/\"},\"wordCount\":1297,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/\",\"name\":\"Frontend Thursday vol. 78 - to ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg\",\"datePublished\":\"2022-03-10T18:12:15+00:00\",\"dateModified\":\"2022-09-19T11:16:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg\",\"width\":1280,\"height\":775},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 78 &#8211; to ju\u017c koniec TypeScript! &#8211; typy trafi\u0105 do JavaScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Frontend Thursday vol. 78 - to ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 78 - to ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript - Vived","og_description":"W minionym tygodniu naprawd\u0119 sporo si\u0119 dzia\u0142o (w jednym tygodniu pojawi\u0142 si\u0119 zar\u00f3wno nowy React jak i TypeScript), wi\u0119c bez zb\u0119dnego przed\u0142u\u017cania \u0142apcie gor\u0105c\u0105 herbat\u0119 i zapraszamy do lektury!","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/","og_site_name":"Vived","article_published_time":"2022-03-10T18:12:15+00:00","article_modified_time":"2022-09-19T11:16:31+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/FRONTEND.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","twitter_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/FRONTEND.png","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 78 &#8211; to ju\u017c koniec TypeScript! &#8211; typy trafi\u0105 do JavaScript","datePublished":"2022-03-10T18:12:15+00:00","dateModified":"2022-09-19T11:16:31+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/"},"wordCount":1297,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/","name":"Frontend Thursday vol. 78 - to ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg","datePublished":"2022-03-10T18:12:15+00:00","dateModified":"2022-09-19T11:16:31+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/1d99707770e4836e1a4f6b6a1d8c8eb190857300.jpg","width":1280,"height":775},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-78-to-juz-koniec-typescript-typy-trafia-do-javascript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 78 &#8211; to ju\u017c koniec TypeScript! &#8211; typy trafi\u0105 do JavaScript"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb","name":"Tomasz Borowicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","caption":"Tomasz Borowicz"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. To ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript<\/h2>\n","innerContent":["\n<h2>1. To ju\u017c koniec TypeScript! - typy trafi\u0105 do JavaScript<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No dobra - na razie nie wiadomo czy i je\u015bli tak to kiedy tytu\u0142owe typy trafi\u0105 do JavaScript. R\u00f3wnie\u017c szanse na to, \u017ce ich pojawienie si\u0119 zako\u0144czy \u017cywot TypeScriptu s\u0105 raczej nik\u0142e. Musicie jednak przyzna\u0107, \u017ce uda\u0142o mi si\u0119 przyci\u0105gn\u0105\u0107 Wasz\u0105 uwag\u0119. Wykorzystajmy ten fakt i przyjrzyjmy si\u0119 dok\u0142adniej szalonemy pomys\u0142owi dodania typ\u00f3w do JavaScriptu na jaki wpad\u0142 Microsoft.<\/p>\n","innerContent":["\n<p>No dobra - na razie nie wiadomo czy i je\u015bli tak to kiedy tytu\u0142owe typy trafi\u0105 do JavaScript. R\u00f3wnie\u017c szanse na to, \u017ce ich pojawienie si\u0119 zako\u0144czy \u017cywot TypeScriptu s\u0105 raczej nik\u0142e. Musicie jednak przyzna\u0107, \u017ce uda\u0142o mi si\u0119 przyci\u0105gn\u0105\u0107 Wasz\u0105 uwag\u0119. Wykorzystajmy ten fakt i przyjrzyjmy si\u0119 dok\u0142adniej szalonemy pomys\u0142owi dodania typ\u00f3w do JavaScriptu na jaki wpad\u0142 Microsoft.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Proposal, kt\u00f3ry zaprezentowa\u0142 Microsoft, dodaje do JavaScriptu sk\u0142adni\u0119 typ\u00f3w bli\u017aniaczo podobn\u0105 do tej znanej z TypeScript. Magiczny trik umo\u017cliwiaj\u0105cy wzgl\u0119dn\u0105 kompatybilno\u015b\u0107 polega na tym, \u017ce interpreter traktowa\u0142 b\u0119dzie typy w ten sam spos\u00f3b w jaki traktuje komentarze - kompletnie je ignoruj\u0105c. Je\u015bli z ty\u0142u g\u0142owy ko\u0142acze si\u0119 Wam my\u015bl, \u017ce kto\u015b kiedy\u015b zrobi\u0142 ju\u017c co\u015b podobnego, to python wykorzystuje typy w bardzo podobny spos\u00f3b. R\u00f3\u017cnica polega na tym, \u017ce python udost\u0119pnia cz\u0119\u015b\u0107 metadanych o typach w runtime, natomiast JavaScript mia\u0142by pozbywa\u0107 si\u0119 ich kompletnie.<\/p>\n","innerContent":["\n<p>Proposal, kt\u00f3ry zaprezentowa\u0142 Microsoft, dodaje do JavaScriptu sk\u0142adni\u0119 typ\u00f3w bli\u017aniaczo podobn\u0105 do tej znanej z TypeScript. Magiczny trik umo\u017cliwiaj\u0105cy wzgl\u0119dn\u0105 kompatybilno\u015b\u0107 polega na tym, \u017ce interpreter traktowa\u0142 b\u0119dzie typy w ten sam spos\u00f3b w jaki traktuje komentarze - kompletnie je ignoruj\u0105c. Je\u015bli z ty\u0142u g\u0142owy ko\u0142acze si\u0119 Wam my\u015bl, \u017ce kto\u015b kiedy\u015b zrobi\u0142 ju\u017c co\u015b podobnego, to python wykorzystuje typy w bardzo podobny spos\u00f3b. R\u00f3\u017cnica polega na tym, \u017ce python udost\u0119pnia cz\u0119\u015b\u0107 metadanych o typach w runtime, natomiast JavaScript mia\u0142by pozbywa\u0107 si\u0119 ich kompletnie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4010,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-today-proposed-1024x526.jpg\" alt=\"\" class=\"wp-image-4010\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-today-proposed-1024x526.jpg\" alt=\"\" class=\"wp-image-4010\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To, \u017ce typy b\u0119d\u0105 ignorowane przez interpreter nie oznacza, \u017ce my deweloperzy nie skorzystamy z ich obecno\u015bci. Podobnie jak ma to miejsce przy korzystaniu JSDoc, tak i tutaj do IDE i narz\u0119dzi deweloperskich mo\u017cliwe b\u0119dzie podpi\u0119cie type-checkera, kt\u00f3ry ostrzega\u0142 nas b\u0119dzie przed b\u0142\u0119dami. Cz\u0119\u015b\u0107 deweloper\u00f3w twierdzi r\u00f3wnie\u017c, \u017ce samo dodanie typ\u00f3w sprawia, \u017ce kod jest znacznie czytelniejszy. Ja osobi\u015bcie mocno si\u0119 z nimi nie zgadzam, bo typy bez podpi\u0119tego type-checkera s\u0105 dla mnie oczywistym strza\u0142em w kolano.<\/p>\n","innerContent":["\n<p>To, \u017ce typy b\u0119d\u0105 ignorowane przez interpreter nie oznacza, \u017ce my deweloperzy nie skorzystamy z ich obecno\u015bci. Podobnie jak ma to miejsce przy korzystaniu JSDoc, tak i tutaj do IDE i narz\u0119dzi deweloperskich mo\u017cliwe b\u0119dzie podpi\u0119cie type-checkera, kt\u00f3ry ostrzega\u0142 nas b\u0119dzie przed b\u0142\u0119dami. Cz\u0119\u015b\u0107 deweloper\u00f3w twierdzi r\u00f3wnie\u017c, \u017ce samo dodanie typ\u00f3w sprawia, \u017ce kod jest znacznie czytelniejszy. Ja osobi\u015bcie mocno si\u0119 z nimi nie zgadzam, bo typy bez podpi\u0119tego type-checkera s\u0105 dla mnie oczywistym strza\u0142em w kolano.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4011,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-checking-behavior-1024x478.jpg\" alt=\"\" class=\"wp-image-4011\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/tac-announcement-checking-behavior-1024x478.jpg\" alt=\"\" class=\"wp-image-4011\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Warto zwr\u00f3ci\u0107 r\u00f3wnie\u017c uwag\u0119 na r\u00f3\u017cnice pomi\u0119dzy proponowanym formatem, a znanym ju\u017c JSDoc. Po pierwsze proponowany przez Microsoft format jest znacznie zwi\u0119\u017alejszy i czytelniejszy ni\u017c JSDoc. Po drugie mo\u017cliwo\u015bci JSDoc s\u0105 mocno ograniczone (za jego pomoc\u0105 ci\u0119\u017cko jest zdefiniowa\u0107 chocia\u017cby generyki) i nowy format ma pozbywa\u0107 si\u0119 tych ogranicze\u0144.<\/p>\n","innerContent":["\n<p>Warto zwr\u00f3ci\u0107 r\u00f3wnie\u017c uwag\u0119 na r\u00f3\u017cnice pomi\u0119dzy proponowanym formatem, a znanym ju\u017c JSDoc. Po pierwsze proponowany przez Microsoft format jest znacznie zwi\u0119\u017alejszy i czytelniejszy ni\u017c JSDoc. Po drugie mo\u017cliwo\u015bci JSDoc s\u0105 mocno ograniczone (za jego pomoc\u0105 ci\u0119\u017cko jest zdefiniowa\u0107 chocia\u017cby generyki) i nowy format ma pozbywa\u0107 si\u0119 tych ogranicze\u0144.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/**\n * @param {string}  p1 - A string param.\n * @param {string=} p2 - An optional param (Closure syntax)\n * @param {string} [p3] - Another optional param (JSDoc syntax).\n * @param {string} [p4=\"test\"] - An optional param with a default value\n * @return {string} This is the result\n *\/\nfunction stringsStringStrings(p1, p2, p3, p4) {\n    \/\/ TODO\n}\n\nfunction stringsStringStrings(p1: string, p2?: string, p3?: string, p4 = \"test\"): string {\n    \/\/ TODO\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/**\n * @param {string}  p1 - A string param.\n * @param {string=} p2 - An optional param (Closure syntax)\n * @param {string} [p3] - Another optional param (JSDoc syntax).\n * @param {string} [p4=\"test\"] - An optional param with a default value\n * @return {string} This is the result\n *\/\nfunction stringsStringStrings(p1, p2, p3, p4) {\n    \/\/ TODO\n}\n\nfunction stringsStringStrings(p1: string, p2?: string, p3?: string, p4 = \"test\"): string {\n    \/\/ TODO\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Proposal na razie jest dopiero na etapie zerowym, wi\u0119c raczej nie nale\u017cy mocno przywi\u0105zywa\u0107 si\u0119 do jego tre\u015bci. Zanim dotrze do kolejnych etap\u00f3w jego tre\u015b\u0107 zmieni si\u0119 zapewne jeszcze wielokrotnie. Zgodnie z jego tre\u015bci\u0105 do JavaScript mia\u0142oby trafi\u0107 wi\u0119kszo\u015b\u0107 funkcjonalno\u015bci zwi\u0105zanych z typami jakie znamy z TypeScript(w tym generyki i union oraz intersection types!). \u0141atwiej b\u0119dzie wi\u0119c wymieni\u0107 funkcjonalno\u015bci,&nbsp; kt\u00f3re nie b\u0119d\u0105 wspierane, a s\u0105 to enumy, namespaces, parameter properties oraz JSX. No c\u00f3\u017c, nie mo\u017cna mie\u0107 wszystkiego.<\/p>\n","innerContent":["\n<p>Proposal na razie jest dopiero na etapie zerowym, wi\u0119c raczej nie nale\u017cy mocno przywi\u0105zywa\u0107 si\u0119 do jego tre\u015bci. Zanim dotrze do kolejnych etap\u00f3w jego tre\u015b\u0107 zmieni si\u0119 zapewne jeszcze wielokrotnie. Zgodnie z jego tre\u015bci\u0105 do JavaScript mia\u0142oby trafi\u0107 wi\u0119kszo\u015b\u0107 funkcjonalno\u015bci zwi\u0105zanych z typami jakie znamy z TypeScript(w tym generyki i union oraz intersection types!). \u0141atwiej b\u0119dzie wi\u0119c wymieni\u0107 funkcjonalno\u015bci,&nbsp; kt\u00f3re nie b\u0119d\u0105 wspierane, a s\u0105 to enumy, namespaces, parameter properties oraz JSX. No c\u00f3\u017c, nie mo\u017cna mie\u0107 wszystkiego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przegl\u0105daj\u0105c opinie deweloper\u00f3w na twitterze i reddicie nie spos\u00f3b nie odnie\u015b\u0107 wra\u017cenia, \u017ce spo\u0142eczno\u015b\u0107 jest wr\u0119cz zakochana w proposalu Microsoftu. Zreszt\u0105 nic dziwnego, bo statyczne typowanie JavaScriptu wed\u0142ug State of JS od lat by\u0142o najbardziej oczekiwan\u0105 przez deweloper\u00f3w funkcjonalno\u015bci\u0105 JavaScript. Ja z przykro\u015bci\u0105 musz\u0119 przyzna\u0107 si\u0119, \u017ce nie p\u0142yn\u0119 wraz z spo\u0142eczno\u015bci\u0105 na tej fali zachwytu. Wsp\u00f3\u0142czesny kod aplikacji klienckich bezwzgl\u0119dnie wymaga transpilacji i minifikacji, kt\u00f3ra sprawi, \u017ce typy znikn\u0105. Na usprawnieniach mogliby\u015bmy skorzysta\u0107 w trakcie developmentu, ale dost\u0119pne ju\u017c dzi\u015b source mapy zaspokajaj\u0105 moje potrzeby. Do tego z typ\u00f3w w JavaScript nie skorzystaj\u0105 najwi\u0119ksze dost\u0119pne frameworki, bo te albo wykorzystuj\u0105 JSX, albo wymagaj\u0105 kompilacji, albo nawet wymuszaj\u0105 korzystanie z TypeScript. Typy w TypeScript oka\u017c\u0105 si\u0119 wi\u0119c przydatne w niewielkich projektach, kt\u00f3re nie wymagaj\u0105 kompatybilno\u015bci wstecznej przegl\u0105darek.<\/p>\n","innerContent":["\n<p>Przegl\u0105daj\u0105c opinie deweloper\u00f3w na twitterze i reddicie nie spos\u00f3b nie odnie\u015b\u0107 wra\u017cenia, \u017ce spo\u0142eczno\u015b\u0107 jest wr\u0119cz zakochana w proposalu Microsoftu. Zreszt\u0105 nic dziwnego, bo statyczne typowanie JavaScriptu wed\u0142ug State of JS od lat by\u0142o najbardziej oczekiwan\u0105 przez deweloper\u00f3w funkcjonalno\u015bci\u0105 JavaScript. Ja z przykro\u015bci\u0105 musz\u0119 przyzna\u0107 si\u0119, \u017ce nie p\u0142yn\u0119 wraz z spo\u0142eczno\u015bci\u0105 na tej fali zachwytu. Wsp\u00f3\u0142czesny kod aplikacji klienckich bezwzgl\u0119dnie wymaga transpilacji i minifikacji, kt\u00f3ra sprawi, \u017ce typy znikn\u0105. Na usprawnieniach mogliby\u015bmy skorzysta\u0107 w trakcie developmentu, ale dost\u0119pne ju\u017c dzi\u015b source mapy zaspokajaj\u0105 moje potrzeby. Do tego z typ\u00f3w w JavaScript nie skorzystaj\u0105 najwi\u0119ksze dost\u0119pne frameworki, bo te albo wykorzystuj\u0105 JSX, albo wymagaj\u0105 kompilacji, albo nawet wymuszaj\u0105 korzystanie z TypeScript. Typy w TypeScript oka\u017c\u0105 si\u0119 wi\u0119c przydatne w niewielkich projektach, kt\u00f3re nie wymagaj\u0105 kompatybilno\u015bci wstecznej przegl\u0105darek.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3999,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685xpi.jpeg\" alt=\"\" class=\"wp-image-3999\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685xpi.jpeg\" alt=\"\" class=\"wp-image-3999\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie zrozumcie mnie \u017ale - nie jestem przeciwnikiem typ\u00f3w w JavaScript. Z pewno\u015bci\u0105 znajd\u0105 one swoje nisze, takie jak na przyk\u0142ad aplikacje serwerowe, w kt\u00f3rych nie liczy si\u0119 rozmiar wynikowych plik\u00f3w. Ja po prostu nie potrafi\u0119 si\u0119 nimi zachwyci\u0107, bo wszystko czego<\/p>\n","innerContent":["\n<p>Nie zrozumcie mnie \u017ale - nie jestem przeciwnikiem typ\u00f3w w JavaScript. Z pewno\u015bci\u0105 znajd\u0105 one swoje nisze, takie jak na przyk\u0142ad aplikacje serwerowe, w kt\u00f3rych nie liczy si\u0119 rozmiar wynikowych plik\u00f3w. Ja po prostu nie potrafi\u0119 si\u0119 nimi zachwyci\u0107, bo wszystko czego<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4000,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685y95.jpeg\" alt=\"\" class=\"wp-image-4000\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/685y95.jpeg\" alt=\"\" class=\"wp-image-4000\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak ju\u017c wspominali\u015bmy proposal jest na razie na etapie zerowym i Microsoft ma zamiar przedstawi\u0107 go TC39 Meeting na najbli\u017cszym spotkaniu. Patrz\u0105c na reakcj\u0119 spo\u0142eczno\u015bci proposal ten raczej trafi do kolejnych etap\u00f3w. Znaj\u0105c jednak tempo proces\u00f3w TC39, to typy do oficjalnej specyfikacji trafi\u0105 najwcze\u015bniej za kilka lat i to pod postaci\u0105 mocno zmienion\u0105 wzgl\u0119dem zaprezentowanego w tym tygodniu szkicu.<\/p>\n","innerContent":["\n<p>Jak ju\u017c wspominali\u015bmy proposal jest na razie na etapie zerowym i Microsoft ma zamiar przedstawi\u0107 go TC39 Meeting na najbli\u017cszym spotkaniu. Patrz\u0105c na reakcj\u0119 spo\u0142eczno\u015bci proposal ten raczej trafi do kolejnych etap\u00f3w. Znaj\u0105c jednak tempo proces\u00f3w TC39, to typy do oficjalnej specyfikacji trafi\u0105 najwcze\u015bniej za kilka lat i to pod postaci\u0105 mocno zmienion\u0105 wzgl\u0119dem zaprezentowanego w tym tygodniu szkicu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p> <a href=\"https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/\">https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/<\/a><br> <a href=\"https:\/\/github.com\/giltayar\/proposal-types-as-comments\/\">https:\/\/github.com\/giltayar\/proposal-types-as-comments\/<\/a><\/p>\n","innerContent":["\n<p> <a href=\"https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/\">https:\/\/devblogs.microsoft.com\/typescript\/a-proposal-for-type-syntax-in-javascript\/<\/a><br> <a href=\"https:\/\/github.com\/giltayar\/proposal-types-as-comments\/\">https:\/\/github.com\/giltayar\/proposal-types-as-comments\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. TypeScript 4.6<\/h2>\n","innerContent":["\n<h2>2. TypeScript 4.6<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnie tygodnie w Microsoft musia\u0142y by\u0107 bardzo pracowite, bo opr\u00f3cz wspomnianego w poprzednim akapicie proposala w minionym tygodniu wydany zosta\u0142 r\u00f3wnie\u017c TypeScript 4.6. Ja jak zwykle polecam notatk\u0119 przygotowan\u0105 przez Microsoft, bo standardowo ju\u017c jest ona najwy\u017cszej jako\u015bci. Tych, kt\u00f3rzy oczekuj\u0105 telegraficznego skr\u00f3tu najwa\u017cniejszych zmian, zapraszam natomiast poni\u017cej.<\/p>\n","innerContent":["\n<p>Ostatnie tygodnie w Microsoft musia\u0142y by\u0107 bardzo pracowite, bo opr\u00f3cz wspomnianego w poprzednim akapicie proposala w minionym tygodniu wydany zosta\u0142 r\u00f3wnie\u017c TypeScript 4.6. Ja jak zwykle polecam notatk\u0119 przygotowan\u0105 przez Microsoft, bo standardowo ju\u017c jest ona najwy\u017cszej jako\u015bci. Tych, kt\u00f3rzy oczekuj\u0105 telegraficznego skr\u00f3tu najwa\u017cniejszych zmian, zapraszam natomiast poni\u017cej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jedn\u0105 z ciekawszych nowo\u015bci jest naprawa drobnej niekompatybilno\u015bci pomi\u0119dzy JavaScriptem i TypeScriptem. Ten pierwszy w konstruktorze klasy umo\u017cliwia umieszczenie fragmentu kodu przed wywo\u0142aniem super, pod warunkiem \u017ce fragment ten nie odwo\u0142uje si\u0119 do this. TypeScript do tej pory na etapie kompilacji wymaga\u0142, aby wywo\u0142anie super by\u0142o pierwsz\u0105 akcj\u0105 wywo\u0142ywan\u0105 w konstruktorze. Od wersji 4.6 zachowanie to ma zosta\u0107 usp\u00f3jnione.<\/p>\n","innerContent":["\n<p>Jedn\u0105 z ciekawszych nowo\u015bci jest naprawa drobnej niekompatybilno\u015bci pomi\u0119dzy JavaScriptem i TypeScriptem. Ten pierwszy w konstruktorze klasy umo\u017cliwia umieszczenie fragmentu kodu przed wywo\u0142aniem super, pod warunkiem \u017ce fragment ten nie odwo\u0142uje si\u0119 do this. TypeScript do tej pory na etapie kompilacji wymaga\u0142, aby wywo\u0142anie super by\u0142o pierwsz\u0105 akcj\u0105 wywo\u0142ywan\u0105 w konstruktorze. Od wersji 4.6 zachowanie to ma zosta\u0107 usp\u00f3jnione.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">class Base {\n    \/\/ ...\n}\n\nclass Derived extends Base {\n    someProperty = true;\n\n    constructor() {\n        \/\/ previously: error! have to call 'super()' first because it needs to initialize 'someProperty'.\n        doSomeStuff();\n        super();\n    }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">class Base {\n    \/\/ ...\n}\n\nclass Derived extends Base {\n    someProperty = true;\n\n    constructor() {\n        \/\/ previously: error! have to call 'super()' first because it needs to initialize 'someProperty'.\n        doSomeStuff();\n        super();\n    }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Druga interesuj\u0105ca zmiana te\u017c jest w pewnym stopniu napraw\u0105 istniej\u0105cego ju\u017c b\u0142\u0119du. Gdy kompilator sprawdza czy dwa typy mog\u0105 zosta\u0107 do siebie przypisane, to przy osi\u0105gni\u0119ciu odpowiedniego poziomu rekurencji zak\u0142ada on, \u017ce typy s\u0105 kompatybilne. Mimo, \u017ce na pierwszy rzut oka wygl\u0105da to przera\u017caj\u0105co, po g\u0142\u0119bszym zastanowieniu logika ta ma oczywi\u015bcie sporo sensu. Ze wzgl\u0119du na zastosowanie strukturalnego typowanie,&nbsp; niemo\u017cliwe jest por\u00f3wnanie definicji obiekt\u00f3w, co stanowi wyzwanie w sytuacji, gdy poprzez odpowiednie zastosowanie generyk\u00f3w da si\u0119 zdefiniowa\u0107 klas\u0119 o niesko\u0144czonej definicji. Usprawnienie, kt\u00f3re przygotowa\u0142 Microsoft nie rozwi\u0105zuje ca\u0142kowicie problem\u00f3w strukturalnego typowania, ale sprawia \u017ce TypeScript w niekt\u00f3rych przypadkach b\u0119dzie w stanie wykry\u0107 niekompatybilno\u015bci pomi\u0119dzy dwoma bardzo zagnie\u017cd\u017conymi typami.<\/p>\n","innerContent":["\n<p>Druga interesuj\u0105ca zmiana te\u017c jest w pewnym stopniu napraw\u0105 istniej\u0105cego ju\u017c b\u0142\u0119du. Gdy kompilator sprawdza czy dwa typy mog\u0105 zosta\u0107 do siebie przypisane, to przy osi\u0105gni\u0119ciu odpowiedniego poziomu rekurencji zak\u0142ada on, \u017ce typy s\u0105 kompatybilne. Mimo, \u017ce na pierwszy rzut oka wygl\u0105da to przera\u017caj\u0105co, po g\u0142\u0119bszym zastanowieniu logika ta ma oczywi\u015bcie sporo sensu. Ze wzgl\u0119du na zastosowanie strukturalnego typowanie,&nbsp; niemo\u017cliwe jest por\u00f3wnanie definicji obiekt\u00f3w, co stanowi wyzwanie w sytuacji, gdy poprzez odpowiednie zastosowanie generyk\u00f3w da si\u0119 zdefiniowa\u0107 klas\u0119 o niesko\u0144czonej definicji. Usprawnienie, kt\u00f3re przygotowa\u0142 Microsoft nie rozwi\u0105zuje ca\u0142kowicie problem\u00f3w strukturalnego typowania, ale sprawia \u017ce TypeScript w niekt\u00f3rych przypadkach b\u0119dzie w stanie wykry\u0107 niekompatybilno\u015bci pomi\u0119dzy dwoma bardzo zagnie\u017cd\u017conymi typami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">interface Source&lt;T> {\n    prop: Source&lt;Source&lt;T>>;\n}\n\ninterface Target&lt;T> {\n    prop: Target&lt;Target&lt;T>>;\n}\n\nfunction check(source: Source&lt;string>, target: Target&lt;number>) {\n    \/\/ Resolving those types structure will result in an infinite loop. \n    \/\/ Because of that compiler uses depth heuristic\n    target = source;\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">interface Source&lt;T> {\n    prop: Source&lt;Source&lt;T>>;\n}\n\ninterface Target&lt;T> {\n    prop: Target&lt;Target&lt;T>>;\n}\n\nfunction check(source: Source&lt;string>, target: Target&lt;number>) {\n    \/\/ Resolving those types structure will result in an infinite loop. \n    \/\/ Because of that compiler uses depth heuristic\n    target = source;\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">interface Foo&lt;T> {\n    prop: T;\n}\n\ndeclare let x: Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;string>>>>>>;\ndeclare let y: Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;string>>>>>;\n\n\/\/ In TypeScript 4.5 this will work ok. In TypeScript 4.6 compiler will return error\nx = y;<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">interface Foo&lt;T> {\n    prop: T;\n}\n\ndeclare let x: Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;string>>>>>>;\ndeclare let y: Foo&lt;Foo&lt;Foo&lt;Foo&lt;Foo&lt;string>>>>>;\n\n\/\/ In TypeScript 4.5 this will work ok. In TypeScript 4.6 compiler will return error\nx = y;<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatni\u0105 interesuj\u0105c\u0105 nowo\u015bci\u0105 jest lepsze wsparcie dla typ\u00f3w zale\u017cnych. Co tu du\u017co m\u00f3wi\u0107, ma\u0142a rzecz, a cieszy.<\/p>\n","innerContent":["\n<p>Ostatni\u0105 interesuj\u0105c\u0105 nowo\u015bci\u0105 jest lepsze wsparcie dla typ\u00f3w zale\u017cnych. Co tu du\u017co m\u00f3wi\u0107, ma\u0142a rzecz, a cieszy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">type Func = (...args: [\"a\", number] | [\"b\", string]) => void;\n\nconst f1: Func = (kind, payload) => {\n    if (kind === \"a\") {\n        payload.toFixed();  \/\/ 'payload' narrowed to 'number'\n    }\n    if (kind === \"b\") {\n        payload.toUpperCase();  \/\/ 'payload' narrowed to 'string'\n    }\n};\n\nf1(\"a\", 42);\nf1(\"b\", \"hello\");<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">type Func = (...args: [\"a\", number] | [\"b\", string]) => void;\n\nconst f1: Func = (kind, payload) => {\n    if (kind === \"a\") {\n        payload.toFixed();  \/\/ 'payload' narrowed to 'number'\n    }\n    if (kind === \"b\") {\n        payload.toUpperCase();  \/\/ 'payload' narrowed to 'string'\n    }\n};\n\nf1(\"a\", 42);\nf1(\"b\", \"hello\");<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tak jak wspomina\u0142em ju\u017c przy okazji premiery wersji beta TypeScript 4.6, kolejne wydania tego j\u0119zyka od jakiego\u015b czasu ekscytuj\u0105 mnie coraz mniej. Nie odbieram tego jednak negatywnie, bo \u015bwiadczy to o dojrza\u0142o\u015bci jak\u0105 uda\u0142o mu si\u0119 osi\u0105gn\u0105\u0107.<\/p>\n","innerContent":["\n<p>Tak jak wspomina\u0142em ju\u017c przy okazji premiery wersji beta TypeScript 4.6, kolejne wydania tego j\u0119zyka od jakiego\u015b czasu ekscytuj\u0105 mnie coraz mniej. Nie odbieram tego jednak negatywnie, bo \u015bwiadczy to o dojrza\u0142o\u015bci jak\u0105 uda\u0142o mu si\u0119 osi\u0105gn\u0105\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p> https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-4-6\/<\/p>\n","innerContent":["\n<p> https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-4-6\/<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. React 18 Release Candidate<\/h2>\n","innerContent":["\n<h2>3. React 18 Release Candidate<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>React 18 zbli\u017ca si\u0119 wielkimi krokami bo w minionym tygodniu ukaza\u0142a si\u0119 jego pierwsza wersja RC. Dok\u0142adnej analizy nowych funkcjonalno\u015bci mo\u017cecie spodziewa\u0107 si\u0119 przy okazji wydania stabilnej wersji. Tymczasem wspomn\u0119 tylko, \u017ce jest na co czeka\u0107, bo do nowego Reacta zmierzaj\u0105 zmiany do Server Renderig API, usprawniony batching renderowania przy zmianie stanu oraz nowe API dla zewn\u0119trznych bibliotek. No i React wreszcie porzuca r\u00f3wnie\u017c wsparcie dla IE11. Trzymam tylko kciuki, \u017ce faza RC potrwa kr\u00f3cej ni\u017c beta, kt\u00f3ra trwa\u0142a ponad 5 miesi\u0119cy.<\/p>\n","innerContent":["\n<p>React 18 zbli\u017ca si\u0119 wielkimi krokami bo w minionym tygodniu ukaza\u0142a si\u0119 jego pierwsza wersja RC. Dok\u0142adnej analizy nowych funkcjonalno\u015bci mo\u017cecie spodziewa\u0107 si\u0119 przy okazji wydania stabilnej wersji. Tymczasem wspomn\u0119 tylko, \u017ce jest na co czeka\u0107, bo do nowego Reacta zmierzaj\u0105 zmiany do Server Renderig API, usprawniony batching renderowania przy zmianie stanu oraz nowe API dla zewn\u0119trznych bibliotek. No i React wreszcie porzuca r\u00f3wnie\u017c wsparcie dla IE11. Trzymam tylko kciuki, \u017ce faza RC potrwa kr\u00f3cej ni\u017c beta, kt\u00f3ra trwa\u0142a ponad 5 miesi\u0119cy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4002,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-21.gif\" alt=\"\" class=\"wp-image-4002\"\/><figcaption>Autor frontendowego czwartku czekaj\u0105cy na release React 18<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/giphy-21.gif\" alt=\"\" class=\"wp-image-4002\"\/><figcaption>Autor frontendowego czwartku czekaj\u0105cy na release React 18<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p> <a href=\"https:\/\/reactjs.org\/blog\/2022\/03\/08\/react-18-upgrade-guide.html\">https:\/\/reactjs.org\/blog\/2022\/03\/08\/react-18-upgrade-guide.html<\/a><\/p>\n","innerContent":["\n<p> <a href=\"https:\/\/reactjs.org\/blog\/2022\/03\/08\/react-18-upgrade-guide.html\">https:\/\/reactjs.org\/blog\/2022\/03\/08\/react-18-upgrade-guide.html<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>4. Nowe szaty MDN Docs<\/h2>\n","innerContent":["\n<h2>4. Nowe szaty MDN Docs<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najpopularniejsza dokumentacja JavaScript nieco ponad tydzie\u0144 doczeka\u0142a si\u0119 wizualnego od\u015bwie\u017cenia. Opr\u00f3cz zupe\u0142nie nowego ostylowania strony, usprawniona zosta\u0142a r\u00f3wnie\u017c nawigacja oraz zaprezentowane zosta\u0142o nowe logo. Jednym zaprezentowane zmiany przypad\u0142y do gustu, inni natomiast twierdz\u0105, \u017ce jest to krok w ty\u0142. Wszyscy jednak zgadzamy si\u0119, \u017ce dodanie wsparcia dla ciemnego motywu to tak zwany killer feature.<\/p>\n","innerContent":["\n<p>Najpopularniejsza dokumentacja JavaScript nieco ponad tydzie\u0144 doczeka\u0142a si\u0119 wizualnego od\u015bwie\u017cenia. Opr\u00f3cz zupe\u0142nie nowego ostylowania strony, usprawniona zosta\u0142a r\u00f3wnie\u017c nawigacja oraz zaprezentowane zosta\u0142o nowe logo. Jednym zaprezentowane zmiany przypad\u0142y do gustu, inni natomiast twierdz\u0105, \u017ce jest to krok w ty\u0142. Wszyscy jednak zgadzamy si\u0119, \u017ce dodanie wsparcia dla ciemnego motywu to tak zwany killer feature.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":4004,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-1024x575.png\" alt=\"\" class=\"wp-image-4004\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-03-10-at-17.20.57-1024x575.png\" alt=\"\" class=\"wp-image-4004\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Troch\u0119 obok nowej warstwy wizualnej zapowiedziany zosta\u0142 MDN Plus, czyli p\u0142atna subskrypcja w ramach kt\u00f3rej dost\u0119pne b\u0119d\u0105 dodatkowe funkcjonalno\u015bci. Na razie nie wiadomo jakie b\u0119d\u0105 to funkcjonalno\u015bci, ale ja z ciekawo\u015bci\u0105 b\u0119d\u0119 \u015bledzi\u0142 na jakie pomys\u0142y wpad\u0142 zesp\u00f3\u0142 MDN.<\/p>\n","innerContent":["\n<p>Troch\u0119 obok nowej warstwy wizualnej zapowiedziany zosta\u0142 MDN Plus, czyli p\u0142atna subskrypcja w ramach kt\u00f3rej dost\u0119pne b\u0119d\u0105 dodatkowe funkcjonalno\u015bci. Na razie nie wiadomo jakie b\u0119d\u0105 to funkcjonalno\u015bci, ale ja z ciekawo\u015bci\u0105 b\u0119d\u0119 \u015bledzi\u0142 na jakie pomys\u0142y wpad\u0142 zesp\u00f3\u0142 MDN.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4005,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-02-24-at-10.45.53.png\" alt=\"\" class=\"wp-image-4005\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/03\/Screenshot-2022-02-24-at-10.45.53.png\" alt=\"\" class=\"wp-image-4005\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p> <a href=\"https:\/\/hacks.mozilla.org\/2022\/03\/a-new-year-a-new-mdn\/\">https:\/\/hacks.mozilla.org\/2022\/03\/a-new-year-a-new-mdn\/<\/a><\/p>\n","innerContent":["\n<p> <a href=\"https:\/\/hacks.mozilla.org\/2022\/03\/a-new-year-a-new-mdn\/\">https:\/\/hacks.mozilla.org\/2022\/03\/a-new-year-a-new-mdn\/<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=9998"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9998\/revisions"}],"predecessor-version":[{"id":10523,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9998\/revisions\/10523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/7981"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}