TypeScript je nadstavba jazyka JavaScript. Koncem roku se uvede verze 1.0, která bude integrována do Visual Studia 2013. Zatímco JavaScript byl navržen pro aplikace obsahující stovky řádků kódu, TypeScript je navržen pro aplikace obsahující stovky tisíc řádků kódu. Nabízí typovou kontrolu, třídy, moduly rozhraní, IntelliSense, možnost přejmenovávání metod, příkazy Go To Definiton a Find All References. Jeho syntaxe je navržena tak, aby byla co nejvíce shodná se syntaxí ECMAScript 6.
Proč JavaScript nemá typovou kontrolu?
TypeScript tedy nabízí statickou typovou kontrolu. Proč se učit TypeScript a nepočkat, až bude někdy v budoucnu v JavaScriptu? Protože uvedení typů bylo součástí specifikace ECMASCript 4, ale ve výsledku od toho každý dával ruce pryč, až vznikla odlehčená specifikace ECMAScript 6, která typy neobsahuje. V současné době je typová kontrola pro JavaScript v nedohlednu.
Javascriptové běhové prostředí Chakra, které je v Internet Exploreru, si vytváří pro zvýšení výkonu datové typy dynamicky při vykonávání kódu. Zpovzdálí je výsledek poněkud zvláštní. Typový jazyk, který je nezbytný pro velké množství kódu, se přeloží do jazyka bez typové kontroly, ve kterém se typy zase složitě dohledávají, protože bez toho na současných procesorech není možné dosáhnout vysokého výkonu.
Statické datové typy jsou nezbytností pro rozvoj nástrojů pro vývojáře, které pak mohou nabídnout podporu refactoringu kódu, hledání referencí a samozřejmě IntelliSence.
Pokud voláme například REST služby, které nám vracejí data ve formátu JSON, neznáme jejich schéma. Nejsnadnější způsob jejich parsování nabízí dynamický jazyk, který mapuje metody jazyka na data (metoda JSON.parse). Pro tento scénář dává čistě dynamický jazyk smysl. Když však s těmito daty pracujeme, musíme mít jejich strukturu v hlavě. Snadno se pak dělají chyby. TypeScript nabízí rozhraní, které popisuje, jaké má objekt vlastnosti a jakého jsou typu, čímž nahrazuje schéma. To umožňuje používat IntelliSense pro vlastní data.
Dalším příkladem je práce s DOM, jehož struktura je dopředu známá. Díky tomu je možné využít IntelliSense, který urychluje práci. Soubor, který popisuje datové typy DOM a z něhož Visual Studio čerpá informace pro IntellSense do TypeScriptu, má přes 8 000 řádek. Všechny si je už nikdo nemůže zapamatovat. TypeScript však ano.
Kde se TypeScript nejvíce používá?
Pilotní aplikace pro testování jazyka TypeScript je aplikace Xbox Music, která běží na Windows 8 a Xbox One. Obsahuje přes půl milionu řádků typescriptového kódu. TypeScript také používají produktové týmy Bing Maps, Office 365 a Office Web Apps. Mezi dalšími uživateli TypeScriptu je společnost Adobe.
Čím se TypeScript liší od podobných jazyků?
Existují podobné jazyky, které přinášejí obdobné výhody. Patří mezi ně například CoffeeScript, Script# a Dart. Zatímco TypeScript je rozšíření JavaScriptu, CoffeeScript je odlišný jazyk a není typový. Nemůžete například vzít své javascriptové soubory, přejmenovat je na CoffeeScript a rozšiřovat 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ě. TypeScript injektuje váš kód, jedině když použijete dědičnost. I tak se ale jedná jen o 6 řádků kódu. TypeScript je jediný jazyk, který je rozšířením JavaScriptu a nabízí statické typy.
Přísně typový jazyk C# má také dynamický datový typ. Umožňuje to, co dynamické jazyky, jako například JavaScript, jen s tím rozdílem, že hlídá typovost až za běhu. JavaScript má vlastní systém a TypeScript se ho nesnaží nijak měnit. Pouze záměrně programátora více svazuje a zajišťuje mu tím větší podporu, takže neudělá chybu tak snadno. Veškerá typovost se v době překladu ztrácí. Proto nesnižuje výkon.
IntelliSense i pro JavaScript
Podpora IntelliSense pro WinJS by se měla považovat za samozřejmost. Je WinJS TypeScript? Ano, protože JavaScript je podmnožinou TypeScriptu. Otázka zní, jestli je WinJS napsaná v TypeScriptu, aby podporovala typovou kontrolu. Je to však jedno, protože typová kontrola může být poskytnuta i pro javascriptový kód. Je k tomu však potřebný soubor s deklaracemi. V současné době jsou soubory s deklaracemi k dispozici pro většinu javascriptových knihoven. Najdete je na stránce DefinitelyTyped.
IntelliSense vyžaduje typový jazyk. Tento příklad ilustruje, jak datové typy proté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?
TypeScript je open source a podporují ho i vývojová prostředí pro Mac OS X nebo Linux. Mimo Visual Studia ho podporuje i JetBrains WebStorm a PhpStorm.
Asynchronní kód v budoucnu
Proč TypeScript ještě nemá async & await po vzoru jazyků F# a C#? Sice už existuje fork TypeScriptu, který toto pohodlné asynchronní programování podporuje, ale Anders Hejlsberg se rozhodl počkat až na ECMAScript 6. Ten bude podporovat iterátory, které dovolují zkompilovat asynchronní TypeScript kód do JavaScriptu mnohem efektivněji. Bez iterátorů by byl kód příliš odlišný od zdrojového a implementovat podporu pro ladění do Visual Studia by bylo velice obtížné.
Shrnutí
Co tedy TypeScript nabízí?
- Statické datové typy
- Třídy a dědičnost
- Moduly
- Rozhraní
- Generické datové typy
- Kovariance a kontravariance
Co může IDE díky TypeScriptu nabídnout?
- IntelliSence pro vlastní kód, javascriptové knihovny i DOM
- Zvýraznění chyby podtržením kódu
- Refactoring
- Příkazy Go To Definition a Find All References
Příklady
Obvykle se snažím uvádět příklady kódu, ale v tomto případě jsem se rozhodl odkázat na web typescriptlang.org, kde jsou všechny přednosti jazyka TypeScript vysvětleny stručně a názorně.