Dajbych.net


K čemu je dobrý TypeScript

, 6 minut čtení

Type­Script je nad­s­tavba jazyka JavaS­cript. Kon­cem roku se uvede verze 1.0, která bude in­te­grována do Vi­sual Stu­dia 2013. Zatímco JavaScript byl navržen pro ap­likace ob­sahu­jící stovky řádků kódu, Type­Script je navržen pro ap­likace ob­sahu­jící stovky tisíc řádků kódu. Nabízí ty­povou kon­trolu, třídy, moduly rozhraní, In­tel­liSense, možnost pře­j­men­ovávání me­tod, příkazy Go To Defini­ton a Find All Ref­er­ences. Jeho syn­taxe je navržena tak, aby byla co ne­jvíce shodná se syn­taxí EC­MAScript 6.

Proč JavaScript nemá typovou kontrolu?

Type­Script tedy nabízí stat­ickou ty­povou kon­trolu. Proč se učit Type­Script a nepočkat, až bude někdy v bu­doucnu v JavaScriptu? Pro­tože uve­dení typů bylo součástí speci­fikace EC­MASCript 4, ale ve výsledku od toho každý dá­val ruce pryč, až vznikla odle­hčená speci­fikace EC­MAScript 6, která typy neob­sahuje. V současné době je ty­pová kon­trola pro JavaScript v ne­doh­lednu.

Javascrip­tové běhové prostředí Chakra, které je v In­ter­net Ex­ploreru, si vytváří pro zvýšení výkonu da­tové typy dy­nam­icky při vykonávání kódu. Zpovzdálí je výsledek poněkud zvláštní. Ty­pový jazyk, který je nezbytný pro velké množství kódu, se přeloží do jazyka bez ty­pové kon­troly, ve kterém se typy zase složitě doh­ledá­vají, pro­tože bez toho na součas­ných pro­ce­sorech není možné dosáh­nout vysokého výkonu.

Stat­ické da­tové typy jsou nezbyt­ností pro rozvoj nástrojů pro vývo­jáře, které pak mo­hou nabíd­nout pod­poru refac­toringu kódu, hledání ref­erencí a samozře­jmě In­tel­liSence.

Pokud voláme napřík­lad REST služby, které nám vracejí data ve for­mátu JSON, neznáme je­jich schéma. Ne­js­nad­nější způ­sob je­jich parsování nabízí dy­nam­ický jazyk, který ma­puje me­tody jazyka na data (me­toda JSON.parse). Pro tento scénář dává čistě dy­nam­ický jazyk smysl. Když však s těmito daty pracu­jeme, musíme mít je­jich struk­turu v hlavě. Snadno se pak dělají chyby. Type­Script nabízí rozhraní, které popisuje, jaké má ob­jekt vlastnosti a jakého jsou typu, čímž nahrazuje schéma. To umožňuje použí­vat In­tel­liSense pro vlastní data.

Dalším přík­la­dem je práce s DOM, je­hož struk­tura je dopředu známá. Díky tomu je možné využít In­tel­liSense, který urych­luje práci. Sou­bor, který popisuje da­tové typy DOM a z něhož Vi­sual Stu­dio čerpá in­for­mace pro In­tellSense do Type­Scriptu, má přes 8 000 řádek. Všechny si je už nikdo nemůže za­pam­a­to­vat. Type­Script však ano.

Kde se TypeScript nejvíce používá?

Pi­lotní ap­likace pro testování jazyka Type­Script je ap­likace Xbox Mu­sic, která běží na Win­dows 8 a Xbox One. Ob­sahuje přes půl mil­ionu řádků type­scrip­tového kódu. Type­Script také použí­vají pro­duk­tové týmy Bing Maps, Of­fice 365 a Of­fice Web Apps. Mezi dalšími uži­va­teli Type­Scriptu je společnost Adobe.

Čím se TypeScript liší od podobných jazyků?

Ex­is­tují podobné jazyky, které přinášejí ob­dobné výhody. Patří mezi ně napřík­lad Coffee­Script, Script# a Dart. Zatímco Type­Script je rozšíření JavaScriptu, Coffee­Script je odlišný jazyk a není ty­pový. Nemůžete napřík­lad vzít své javascrip­tové soubory, pře­j­men­o­vat je na Coffee­Script a rozšiřo­vat je. Dart nabízí odlišné prostředí než JavaScript, ale za cenu toho, že se v JavaScriptu musí uměle vytvářet. To výrazně snižuje výkon. Script# je na tom podobně. Type­Script in­jek­tuje váš kód, jedině když použi­jete dědičnost. I tak se ale jedná jen o 6 řádků kódu. Type­Script je jed­iný jazyk, který je rozšířením JavaScriptu a nabízí stat­ické typy.

Přísně ty­pový jazyk C# má také dy­nam­ický da­tový typ. Umožňuje to, co dy­nam­ické jazyky, jako napřík­lad JavaScript, jen s tím rozdílem, že hlídá ty­povost až za běhu. JavaScript má vlastní sys­tém a Type­Script se ho nes­naží ni­jak měnit. Pouze záměrně pro­gramá­tora více svazuje a za­jišťuje mu tím větší pod­poru, takže neudělá chybu tak snadno. Vešk­erá ty­povost se v době překladu ztrácí. Proto nes­nižuje výkon.

IntelliSense i pro JavaScript

Pod­pora In­tel­liSense pro WinJS by se měla po­važo­vat za samozře­j­most. Je WinJS Type­Script? Ano, pro­tože JavaScript je podm­noži­nou Type­Scriptu. Otázka zní, jestli je WinJS nap­saná v Type­Scriptu, aby pod­porovala ty­povou kon­trolu. Je to však jedno, pro­tože ty­pová kon­trola může být poskyt­nuta i pro javascrip­tový kód. Je k tomu však potřebný sou­bor s deklaracemi. V současné době jsou soubory s deklaracemi k dis­pozici pro většinu javascrip­tových kni­hoven. Na­jdete je na stránce Def­i­nite­ly­Typed.

In­tel­liSense vyžaduje ty­pový jazyk. Tento přík­lad ilus­truje, jak da­tové typy pro­tékají kó­dem.

var a = ["hello", "world"]; var n = a.map(s => s.length); /* proměnná a je typu array<string> proměnná s je typu string a Visual Studio může nebídnout IntelliSence proměnná n je typu array<number> */

Co když nemám Visual Studio?

Type­Script je open source a pod­porují ho i vývo­jová prostředí pro Mac OS X nebo Linux. Mimo Vi­sual Stu­dia ho pod­poruje i Jet­Brains Web­S­torm a Ph­p­S­torm.

Asynchronní kód v budoucnu

Proč Type­Script ještě nemá async & await po vzoru jazyků F# a C#? Sice už ex­is­tuje fork Type­Scriptu, který toto po­hodlné asyn­chronní pro­gramování pod­poruje, ale An­ders He­jls­berg se rozhodl počkat až na EC­MAScript 6. Ten bude pod­porovat iterá­tory, které do­volují zkom­pilo­vat asyn­chronní Type­Script kód do JavaScriptu mno­hem efek­tivněji. Bez iterá­torů by byl kód příliš odlišný od zdro­jového a im­ple­men­to­vat pod­poru pro ladění do Vi­sual Stu­dia by bylo velice obtížné.

Shrnutí

Co tedy Type­Script nabízí?

Co může IDE díky Type­Scriptu nabíd­nout?

Příklady

Ob­vykle se snažím uvádět přík­lady kódu, ale v tomto pří­padě jsem se rozhodl od­kázat na web type­script­lang.org, kde jsou všechny před­nosti jazyka Type­Script vysvětleny stručně a ná­zorně.