TypeScript, WTF?!

Pokud se poflakujete v komunitě JavaScriptu spolu s left-pad téměř jistě jste slyšeli o TypeScriptu. Díky velkým rámcům, jako je Angular 2 a EmberJS, je to hodně zaměřené. Rád bych si také myslel, že Dojo 2 postavené na TypeScriptu přidává něco do konverzace a rád bych částečně vysvětlil, proč byste měli chtít strávit čas pochopením TypeScriptu.

Microsoft, Bleurgh

Pamatuji si, že jsem slyšel oznámení o TypeScript od Microsoftu a okamžitě jsem to odmítl. Obecně jsem to udělal s většinou věcí od Microsoftu. V mých očích byly, stejně jako mnoho velkých softwarových podniků, dobrým místem pro potlačení inovací a zaměření na značku a marketing. V té době jsem byl ve dne docela senior IT manažer a v noci jsem byl komisařem Dojo. Měl jsem nekonečný proud softwarových společností, které měly řešení mých problémů, bez ohledu na to, jaký byl můj problém, a na povrchu jsem si myslel, že TypeScript je další způsob, jak spojit podniky do plánu společnosti Microsoft.

Úplně jsem se mýlil.

Fanboy Moment

Část pochopení toho, proč je TypeScript jiný, si podle mého názoru musím na chvíli trochu fandit. Anders Hejlsberg. Když jsem se začal dívat do TypeScriptu, uvědomil jsem si, že to jméno je nejasně známé. Koncem 80. a začátkem 90. let jsem používal Turbo Pascal a když vyšlo Delphi, přešel jsem na něj. Miloval jsem to a často jsem kázal náboženství Delphi každému, kdo mohl poslouchat. Přímé programování začalo být pro mou každodenní práci stále méně relevantní, ale Delphi bylo mým bezpečnostním jazykem, kdykoli jsem chtěl sám něco hacknout. Vzpomínám si na den, kdy jsem slyšel, že "velký ole střední" Microsoft "ukradl" jádro Delphi od Borlandu, aby mohl pracovat pro Microsoft.

Samozřejmě o několik let později jsem začal slyšet o C# a nejprve jsem to zavrhl jako „vykrádání Delphi“, ale pomalu se zdálo, že se vyvíjí a ve skutečnosti jde za hranice toho, co Delphi pomohlo přinést světu. Velká část C# samozřejmě vděčí za svou existenci Andersovi.

Když jsem spojil, že Andersova vize (a kód) jsou velké části Turbo Pascalu, Delphi, C# a nyní TypeScriptu, vzrušilo mě to.

Není to hezké, ale je to všechno, co máme

Opravdu si nemyslím, že existuje mnoho, pokud vůbec nějací, vývojářů JavaScriptu, kteří se ráno probudí a řeknou:"Jsem opravdu rád, že pracuji s JavaScriptem, je to tak úžasný jazyk." Brenden Eich se často ocitá jako hlavní obhájce JavaScriptu. JavaScript je dokonalým příkladem zákona nezamýšlených důsledků. Explodoval však z mnoha různých důvodů. I přes obrovské odpůrce a kritiku je to realita, kterou nelze popřít.

Možná by se to dalo přirovnat k angličtině, není to dokonalý jazyk, má spoustu rozbitých částí, spoustu dialektů, z nichž jen podmnožinu jazyka lze považovat za „globálně srozumitelnou“ a mnoho lidí to ve skutečnosti nechápe. to všechno dobře využít. Univerzální jazyk měl být dobře promyšlený a mnohem racionálnější a organizovanější, ale já nemluvím esperantem, vy? Angličtiny se nezbavíme.

Ale co kdybychom mohli přidat nějaké značky pro angličtinu, abychom si mohli trochu lépe zorganizovat jazyk? Můžete si vzít angličtinu a volitelně na ni aplikovat nějaká pravidla. Možná dokonce něco jako markdown, což vám umožní umístit věci jako nadpisy a hypertextové odkazy a bloky kódu , a přitom neporušovat základní jazyk? Zní to dobře, to je TypeScript.

Nerozumím

Díky flexibilitě a nestrukturované povaze JavaScriptu bylo „snadné“ kódování, ale nikdy nebylo snadné jej škálovat. Škálujte ve velkých komplexních udržovatelných kódových bázích, škálujte schopnost lidí rozumět kódu, škálujte ostatní pomocí vašeho kódu. Celý způsob, jakým dnes web funguje, spočívá v rozšíření a interakci a největší překážkou k tomu je porozumění záměru.

Prvním krokem bylo přestat psát kód JavaScript inline v našem značkování HTML a rozdělovat jej do samostatných souborů, které bychom mohli udržovat, a vytvářet funkce:

function myGreatApi(options) {
  /* Hopefully no one needs to read this */
}

Dobře, to je skvělé, ale ještě bych musel napsat nějakou dokumentaci, aby někdo mohl použít můj kód. Možná bychom se tedy mohli shodnout na něčem jako JSDoc:

/**
 * My Great API does something great, just use it
 * @param   {Object} options Some options I need...
 * @returns {Object}         The results of my great API
 */
function myGreatApi(options) {
  /* Hopefully no one needs to read this */
}

Dobře, to je lepší, ale co kdybych chtěl options být volitelný? Co kdybych chtěl vyjádřit, jaké vlastnosti jsem očekával v options ? Jak mohu popsat, jaká návratová hodnota je o něco lepší... Toto vše bych teoreticky mohl přidat ke skutečně komplexnímu JSDoc, ale to ve skutečnosti nelze udržovat a ve skutečnosti není vynuceno (ačkoli věci jako Closure Compiler mi mohou napovědět, že asi to zneužiju). Co kdyby existoval nějaký způsob, jak to popsat způsobem, který by umožnil někomu jinému to jen konzumovat, aniž by o tom věděl obrovské množství?

interface MyGreatApiOptions {
  /**
   * The URL target for my API
   */
  target: string;

  /**
   * Translate from one language to another
   */
  translate?: boolean;
}

interface MyGreatApiResult {
  /**
   * The headers returned from the request
   */
  headers: { [header: string]: string };

  /**
   * The response
   */
  response: string;
}

/**
 * My Great API does something great, just use it
 * @param options Some options I need, maybe, if you want
 */
function myGreatApi(options?: MyGreatApiOptions): MyGreatApiResult {
  /* now, no one has to read this */
}

Nyní mám nejen kompletně zdokumentované API, ale je vymahatelné v době kompilace a je k dispozici mnoho IDE, dokončování kódu, takže vývojář může získat přehled o tom, jak jsou API spotřebovávána v reálném čase.

Zjistil jsem, že TypeScript mi ​​umožňuje nejen vysvětlit moje API ostatním, ale pomáhá mi strukturovat můj kód a vyžaduje, abych si méně pamatoval kód, který jsem napsal, soustředil se na psaní produktivního kódu a méně času na čtení a opětovné čtení kódu. již napsal.

Otevřenost

Jedna z nejlepších věcí na TypeScriptu je jeho otevřenost a transparentnost. Jedná se o prvotřídní Open Source projekt. Tým nejenže vytvořil open source kompilátor TypeScript, ale i nadále zvyšuje standard a vyvíjí tlak na zbytek Microsoftu, aby našel způsoby, jak otevřít zdroje nástrojů, které spoléhají. Například nástroj, který vytváří definice knihovny prohlížeče, byl otevřen jako open source. Inteligence, kterou použili k vytvoření editoru v prohlížeči, byla také vydána jako součást kódu Visual Studio s otevřeným zdrojem.

Háček

Vývojáři jsou nuzná parta a TypeScript vyvíjený otevřeně znamená, že lidé mohou tyto potřeby často vyjádřit.

Někdy si také vývojáři pletou open source s demokracií. Open source znamená být otevřený, umožnit lidem vidět váš kód a váš vývojový proces a být transparentní ohledně toho, jaká rozhodnutí děláte a proč. Neznamená to, že něco „opravdu potřebujete“, že to bude zahrnuto. TypeScript formuloval své cíle návrhu, což je skvělý referenční bod pro rozhodování o směřování jazyka.

TypeScript (zatím) nemá koncept transformací pluginů, což ho odlišuje od takových jako Babel. Vidím, jak by taková funkce mohla velmi dobře nasytit potřebné vývojáře, skoro vidím, že je to nožní zbraň pro jazyk, který se ze všech sil snaží pomáhat vývojářům nepsat „špatný“ kód. Již nyní vidíme v komunitě Babel špatně napsané a udržované transformace, které způsobují nejrůznější masakry a problémy.

TypeScript je stále relativně „mladý“, a proto se každým dnem rozrůstá, ale podle mého názoru do značné míry rostl pod opravdu dobrým vedením a správným směrem. V TypeScriptu 2.0 přicházejí některé významné změny, které nadále naplňují příslib rozšíření JavaScriptu. To zahrnuje úplné přepsání způsobu, jakým jsou typy analyzovány v toku kódu, a funkci opt-in, která se začíná vypořádat s logickými chybami kolem flexibility věcí undefined nebo null v JavaScriptu.

Vzhledem k mládí je však TypeScript stále vyspělý po svých letech. Tím, že je nadmnožinou JavaScriptu, nevynalézá znovu kolo, ale staví na jazyku, který, ať už dobrý nebo špatný, pohání web. Ve spojení s těmi, kdo jsou zapojeni, mají hluboké zkušenosti s konstrukcí jazyka a čerpání ze zkušeností všech ostatních tím, že jsou otevřeni, to skutečně urychlilo, že je nyní připraveno k produkci.

Konečně...

Pokud jste se tedy na TypeScript nepodívali, doufám, že jsem vás přesvědčil, že je to něco, co stojí alespoň za trochu vašeho času. Osobně věřím, že je to součást velkého kulturního posunu v Microsoftu, ale i když to pro vás není důležité, lze to posuzovat zcela podle jeho vlastních zásluh. Má některé z nejlepších mozků zaměřených na škálování JavaScriptu a tým na to jde způsobem, který je otevřený a transparentní. Přijetím reality JavaScriptu a budováním na jeho vrcholu podle mého názoru TypeScript transformuje běžný jazyk webu k lepšímu.


No