Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Frontendisti - Špekulování (o TypeScriptu)

Frontendisti - Špekulování (o TypeScriptu)

Aleš Roubíček

February 11, 2021
Tweet

More Decks by Aleš Roubíček

Other Decks in Programming

Transcript

  1. Kontext • Vývoj webů a webových aplikací • Malé týmy

    (do pěti členů) • Ukázky použití některých technik najdete v projektu https://github.com/topmonks/ hlidac-shopu
  2. TypeScript • Unsound Statically checked Gradually typed Dynamic language •

    Explicitní typové anotace v kódu = moderní šum • Neschopnost unwrapovat generika (await Promise<T> => any) • Tragická “podpora” pro typovaná pole (arrays, tuples) • Typová gymnastika v kódu, jen abych zkompiloval • Neskutečně pomalá kompilace (více jak 8 let vývoje!) • Špatně otypované knihovny jsou standart Typový system v TypeScriptu je sice Turingově kompletní, ale nezvládá úplně základní věci. (nejspíše jen OOTB, jak jsem byl následně informován)
  3. Mýty a legendy • Typová bezpečnost • Zachytí chyby už

    při kompilaci • Snažší Refactoring • Snazší vývoj a údržba komplikovaných systémů • Snazší vývoj ve velkých teamech • Ochrání vás před křehkostí na klientech
  4. Poznámky k mýtům a legendám Kompilace zachytává pouze kompilační chyby,

    nijak nereflektuje, co se děje v runtime. Refactoring usnadní: Monorepo Kontinuální integrace (a unit testy) Automatizované nástroje Nedělejte komplikované systémy. Stavte komplexní systémy kompozicí jednoduchých částí. Jednoduché části se lépe vytváří a udržují v malých focusovaných teamech.
  5. Bojíme se nejistoty! • Víra vede k náboženství • Komplexní

    otázky vedou k zjednodušujícím odpovědím • Interpretace se stává dogmatem • Raději budeme žít v omylu než v nejistotě Dan North - Embracing uncertainty
  6. Komplexita domény Nepochopení/Nedorozumění 10x PLOP - place oriented programming Slabá

    podpora pro informace Křehkost/úzké vazby Komplexita jazykového modelu Chybějící nadhled/kontext Slabá podpora pro názvy Distribuce Utilizace zdrojů Knihovny Konkurence 10x Nekonzistence Překlepy Rich Hickey - Effective programs Cena chyby
  7. Poznámka k TypeScriptu Já (i mí milí kolegové) TypeScript většinou

    používáme tam, kde je dobrý - jako zdroj informací pro našeptávání v editoru. Ostatně kvůli tomu TypeScript vznikl. TypeScript je nekvalitní type checker a proto ho k tomu nepoužíváme. Doplňujeme ho jinými nástroji, viz dále.
  8. Schémata • JSON Schema/OpenAPI • Ověřování za běhu • schema.org

    • Společný slovník a struktury nejen pro HTML5 microdata (Linked Data, RDF…)
  9. Transit • Přenosový protokol/encoding • Typovaná data bez ztráty informace

    • Vyjednávání podle MIME typu • Accept: application/transit+json https://github.com/cognitect/transit-format
  10. JSDoc • Typy jsou (součástí) dokumentace • Široká kompatibilita (TypeScript,

    Google Closure, ClojureScript…) • Oddělení zodpovědností • Pokud mě zajímají typy nemusím je lovit v kódu • Na popis typů můžu použít DSL - TypeScript v *.d.ts https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html Našeptávání je obohaceno jak dokumentačními komentáři, tak informacemi z TypeScript LSP, který JSDoc rozumí. JSDoc je jen způsob, jak plně využít TypeScript bez nutnosti psát *.ts soubory a transpilovat je do *.js
  11. Tipy pro autory knihoven • JS ekosytém je mnohem věší

    než zastaralý Webpack/Babel/React (mediálně to tak nemusí vypadat) • Do npm emitujte moderní ECMAScript (2018+) • Zapomeňte na ES3 nebo ESM+ES5 bordel • Google Closure zvládne ESM+ES6 i bez JSDoc
  12. Další užitečné nástroje * ESLint * Balíčky s best practices

    (async/await, Promises, Performance, Security… https://github.com/dustinspecker/awesome-eslint) * tabnine (https://www.tabnine.com/) * AI driven IntelliSense * CodeScene (https://codescene.io/) * Odhalování skrytých rizik a sociálních vzorů