{"id":514,"date":"2012-12-04T17:34:18","date_gmt":"2012-12-04T15:34:18","guid":{"rendered":"https:\/\/esimov.com\/blog\/?p=514"},"modified":"2014-11-10T10:35:52","modified_gmt":"2014-11-10T08:35:52","slug":"typescript-first-impressions","status":"publish","type":"post","link":"https:\/\/esimov.com\/blog\/2012\/12\/04\/typescript-first-impressions\/","title":{"rendered":"First impressions about Typescript, the new authoring tool from Microsoft"},"content":{"rendered":"<p>In this blog post i want to share my first impression about Typescript, the new programming language from Microsoft.<\/p>\n<h2>The background<\/h2>\n<p>Coming from Flash\/Actionscript, and having done almost all my experiments in AS3, facing the loose typing nature of JavaScript was a bit daunting for me. Over the time I got familiarized\u00a0myself with all the mystical parts of JavaScript, with it&#8217;s prototyping nature, with the strange fact that JS hasn&#8217;t a type interface, and you can declare a variable without declaring the type of that variable. In fact all the declared variables can take any type of value, and assigning a different type of value to the variable wont make the compiler to trow an exception (only if we force to do so). This proved to be the weakness of JavaScript and the most acclaimed factor which stand in front of developing highly scalable applications.<\/p>\n<p>wo<\/p>\n<p>The first question that may arise is what is Typescript? The answer is: Typescript is a superset of JavaScript which compiles to JavaScript at runtime, all while maintaining your existing code and using the existing libraries. And why Typescript? The short answer: because Typescript is awesome. The long answer will follow.<\/p>\n<p>One of the main benefits using typescript is code validation at compile time and compilation to native Javascript file at the runtime.<\/p>\n<p>This differentiate Typescript from other competitors, nominating mainly two contenders: <a href=\"http:\/\/www.dartlang.org\/\">DART<\/a>\u00a0( which is a very heavy assault initiative from Google meant to\u00a0eliminate\u00a0all the weakness and flawless of JavaScript, introducing a completely new language, having as target not less than being the web native language), and <a href=\"http:\/\/coffeescript.org\/\">Coffescript<\/a> which is a\u00a0syntactic\u00a0sugar of Javascript, which compile to Javascript. Typescript somehow break in the middle of the two, because DART is a fundamentally and completely different language than Javascript, with strong typing, traditional class \u00a0structures, modules etc. On the other hand Coffescript embraced the new ECMA-6 (Harmony) features like classes, \u00a0import\u00a0modules (only when\u00a0required) etc, but it&#8217;s weakness is the same as of Javascript: the absence of type annotation and a very limited or almost completely absent feedback response and lack of debugging tools. This got managed by TypeScript.<\/p>\n<h2>Getting started<\/h2>\n<p>I won&#8217;t go into much details how to get started with Typescript. You can download the source from the official page of the language:\u00a0<a href=\"http:\/\/www.typescriptlang.org\/\">http:\/\/www.typescriptlang.org\/<\/a>, then if you are a Windows 8 or at least Windows 7 user and preferably (not my case) .NET developer you&#8217;ll have a very easy time to get started with coding. There is a plugin for Microsoft Visual Studio 2012 downloadable from the same source. I&#8217;ve tried installing on Vista, after too many trials and errors finally got working, unfortunately without code highlighting and code completion. So in the end decided to write a <a href=\"https:\/\/gist.github.com\/4214242\">plugin<\/a> for Sublime Text 2 editor (my editor of choice). <a href=\"http:\/\/stackoverflow.com\/questions\/12799237\/how-to-watch-and-compile-all-typescript-sources\/12800090#12800090\">Here<\/a> is the Stackoverflow thread explaining the process to automate the code transcription from TS to JS. The only weakness is\u00a0&#8211;  at the time of this writing &#8211; \u00a0there isn&#8217;t a code completion and live time error checking plugin implemented. A good news is that Webstorm 6.0 is already offering support for Typescript. This article summarize in a few words the capabilities of Typescript in Webstorm perspective:\u00a0<a href=\"http:\/\/joeriks.com\/2012\/11\/20\/a-first-look-at-the-typescript-support-in-webstorm-6-eap\/\">http:\/\/joeriks.com\/2012\/11\/20\/a-first-look-at-the-typescript-support-in-webstorm-6-eap\/<\/a>.<\/p>\n<p>There is a live playground available for online experimentation with a few samples at disposal:\u00a0<a href=\"http:\/\/www.typescriptlang.org\/Playground\/\">http:\/\/www.typescriptlang.org\/Playground\/<\/a><\/p>\n<p><\/p>\n<h2>Things I liked in Typescript<\/h2>\n<p><\/p>\n<h3>Static value declaration<\/h3>\n<p>As i said earlier declaring a variable in JS is simply assigning a value to it, the rest of internal operations are up to the JIT compiler. This is the root of many unwanted errors which happens when we unconsciously\u00a0 messing up different types of values with the originally declared variable. Typescript helps to resolve this issue by allowing to statically declare the variable type. If no type has been specified the type <kbd>any<\/kbd> is inferred.<\/p>\n<pre class=\" language-css\"><code class=\" language-css\">var <span class=\"token property\">num<\/span><span class=\"token punctuation\">:<\/span> number = 20<span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p>which compiles to JS as:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token keyword\">var<\/span> num <span class=\"token operator\">=<\/span> <span class=\"token number\">20<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p>The only chance in JS to get feedback about the errors is to use test cases by covering all the possible errors you might expect:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token keyword\">if<\/span> <span class=\"token keyword\">typeof<\/span> num <span class=\"token operator\">!<\/span><span class=\"token operator\">==<\/span> <span class=\"token string\">\"number\"<\/span> <span class=\"token punctuation\">{<\/span>\r\n   throw <span class=\"token keyword\">new<\/span> Error<span class=\"token punctuation\">(<\/span>num<span class=\"token punctuation\">,<\/span> <span class=\"token string\">\" is not a number\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>On the other hand TS informs instantly about the errors as you type.<\/p>\n<h3>Arrow function expression<\/h3>\n<p>Another great feature is the addition of the so called arrow function expression. These are useful on situations when we need to preserve the scope of the outer execution context. A common practice widespread among JS developers is to bind <kbd>this<\/kbd> to a variable <kbd>self<\/kbd> which we place outside the inner function.<br \/>\nA function expression using the <kbd>function<\/kbd> keyword introduces a new dynamically bound <kbd>this<\/kbd>, whereas an arrow function expression preserves the <kbd>this<\/kbd> of its enclosing context. These are particularly useful in situation when we need to write <kbd>callbacks<\/kbd> like in the following example.<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token keyword\">function<\/span> sayHello<span class=\"token punctuation\">(<\/span>message<span class=\"token punctuation\">:<\/span>string<span class=\"token punctuation\">,<\/span> callback<span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">=&gt;<\/span>any<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\talert<span class=\"token punctuation\">(<\/span>message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\tsetTimeout<span class=\"token punctuation\">(<\/span>callback<span class=\"token punctuation\">,<\/span> <span class=\"token number\">2000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nsayHello<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Welcome visitor\"<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\talert<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"thank you\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\t\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><\/p>\n<h3>Classes, modules, interfaces<\/h3>\n<p>Probably the greatest addition of Typescript is the possibility to work with <kbd>classes<\/kbd>, <kbd>modules<\/kbd> and <kbd>interfaces<\/kbd>.<\/p>\n<h4>Interfaces<\/h4>\n<p>Let&#8217;s start with <strong>interfaces<\/strong>. In Typescript interfaces have only a contextual scope, they haven&#8217;t any runtime representations of the compiled code. Their role is only to create a syntactic structure, a shell which is particular useful for object properties validation, in other words for documenting and validating the required shape of properties, objects passed as parameters, and objects returned from functions. In TS, interfaces are actually object types. While in Actionscript you have to have a class to implement the interface, in TS a simple object can implement it. Here is how you declare interfaces in TS:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\">interface Person <span class=\"token punctuation\">{<\/span>\r\n\tname<span class=\"token punctuation\">:<\/span> string<span class=\"token punctuation\">;<\/span>\r\n\tage<span class=\"token operator\">?<\/span><span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">function<\/span> print<span class=\"token punctuation\">(<\/span>person<span class=\"token punctuation\">:<\/span> Person<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>person<span class=\"token punctuation\">.<\/span>age<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\talert<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Welcome \"<\/span> <span class=\"token operator\">+<\/span> person<span class=\"token punctuation\">.<\/span>name <span class=\"token operator\">+<\/span> <span class=\"token string\">\" you are \"<\/span> <span class=\"token operator\">+<\/span> person<span class=\"token punctuation\">.<\/span>age <span class=\"token operator\">+<\/span> <span class=\"token string\">\" age\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\t\r\n\t<span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\talert<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Welcome \"<\/span> <span class=\"token operator\">+<\/span> person<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nprint<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>name<span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"George\"<\/span><span class=\"token punctuation\">,<\/span> age<span class=\"token punctuation\">:<\/span><span class=\"token number\">22<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p>Furthermore interfaces have function overloading features which means that you can pass two identical functions on the same interface and let the user decide at the implementation phase which function wants to implement:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\">interface Overload <span class=\"token punctuation\">{<\/span>\r\n\tfoo<span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">:<\/span>string<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span> string<span class=\"token punctuation\">;<\/span>\r\n\tfoo<span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">:<\/span>number<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">function<\/span> process<span class=\"token punctuation\">(<\/span>o<span class=\"token punctuation\">:<\/span>Overload<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\to<span class=\"token punctuation\">.<\/span>foo<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"string\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\to<span class=\"token punctuation\">.<\/span>foo<span class=\"token punctuation\">(<\/span><span class=\"token number\">23<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Another very interesting particularity of Typescript is that above the support offered for overloading functions, this is applicable for constructors too. This way we can redefine multiple constructor only by changing the way we implement it.<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token keyword\">var<\/span> canvas <span class=\"token operator\">=<\/span> document<span class=\"token punctuation\">.<\/span>createElement<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"canvas\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\ndocument<span class=\"token punctuation\">.<\/span>body<span class=\"token punctuation\">.<\/span>appendChild<span class=\"token punctuation\">(<\/span>canvas<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">var<\/span> ctx <span class=\"token operator\">=<\/span> canvas<span class=\"token punctuation\">.<\/span>getContext<span class=\"token punctuation\">(<\/span><span class=\"token string\">'2d'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\ninterface ICircle <span class=\"token punctuation\">{<\/span>\r\n\tx<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\ty<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\tradius<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\tcolor<span class=\"token operator\">?<\/span><span class=\"token punctuation\">:<\/span> string<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nclass Circle <span class=\"token punctuation\">{<\/span>\r\n\tpublic x<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\tpublic y<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\tpublic radius<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\tpublic color<span class=\"token punctuation\">:<\/span> string <span class=\"token operator\">=<\/span> <span class=\"token string\">\"#000\"<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\r\n\tconstructor <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span>\t\t\r\n\t\r\n\tconstructor <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> \r\n\t\tthis<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">=<\/span> Math<span class=\"token punctuation\">.<\/span>random<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> canvas<span class=\"token punctuation\">.<\/span>width<span class=\"token punctuation\">;<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">=<\/span> Math<span class=\"token punctuation\">.<\/span>random<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> canvas<span class=\"token punctuation\">.<\/span>height<span class=\"token punctuation\">;<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>radius <span class=\"token operator\">=<\/span> <span class=\"token number\">40<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\t\t \t\t\r\n\t\r\n\tconstructor <span class=\"token punctuation\">(<\/span>circle<span class=\"token punctuation\">:<\/span> ICircle <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>x<span class=\"token punctuation\">:<\/span>Math<span class=\"token punctuation\">.<\/span>random<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> canvas<span class=\"token punctuation\">.<\/span>width<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">:<\/span>Math<span class=\"token punctuation\">.<\/span>random<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> canvas<span class=\"token punctuation\">.<\/span>height<span class=\"token punctuation\">,<\/span> radius<span class=\"token punctuation\">:<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">=<\/span> circle<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">;<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">=<\/span> circle<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">;<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>radius <span class=\"token operator\">=<\/span> circle<span class=\"token punctuation\">.<\/span>radius<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">var<\/span> c <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> Circle<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\nctx<span class=\"token punctuation\">.<\/span>fillStyle <span class=\"token operator\">=<\/span> c<span class=\"token punctuation\">.<\/span>color<span class=\"token punctuation\">;<\/span>\r\nctx<span class=\"token punctuation\">.<\/span>beginPath<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\nctx<span class=\"token punctuation\">.<\/span>arc<span class=\"token punctuation\">(<\/span>c<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">,<\/span> c<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">,<\/span> c<span class=\"token punctuation\">.<\/span>radius<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> Math<span class=\"token punctuation\">.<\/span>PI <span class=\"token operator\">*<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\nctx<span class=\"token punctuation\">.<\/span>closePath<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\nctx<span class=\"token punctuation\">.<\/span>fill<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<\/p>\n<h4>Classes<\/h4>\n<p>The most advanced feature of Typescript (from my point of view) is the addition of the more traditional class structure with all the hotness like inheritance, polymorphism, constructor functions etc. In Typescript we are declaring the class in the following way:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\">class Point <span class=\"token punctuation\">{<\/span>\r\n\tx<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\ty<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\t\r\n\tconstructor<span class=\"token punctuation\">(<\/span>x<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">=<\/span> x<span class=\"token punctuation\">;<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">=<\/span> y<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n\tsqrt<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\r\n\t\t<span class=\"token keyword\">return<\/span> Math<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>this<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> this<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">+<\/span> this<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">*<\/span> this<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">)<\/span> \r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n\tprint<span class=\"token punctuation\">(<\/span>callback<span class=\"token operator\">?<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\t\t \r\n\t\tsetTimeout<span class=\"token punctuation\">(<\/span>callback<span class=\"token punctuation\">,<\/span> <span class=\"token number\">3000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nclass Point3D extends Point <span class=\"token punctuation\">{<\/span>\t\r\n\tz <span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\t\r\n\tconstructor <span class=\"token punctuation\">(<\/span> x<span class=\"token punctuation\">:<\/span>number<span class=\"token punctuation\">,<\/span>  y<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">,<\/span> z<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\tsuper<span class=\"token punctuation\">(<\/span>x<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n\tsqrt<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">var<\/span> d <span class=\"token operator\">=<\/span> super<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> Math<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>d <span class=\"token operator\">*<\/span> d <span class=\"token operator\">+<\/span> this<span class=\"token punctuation\">.<\/span>z <span class=\"token operator\">*<\/span> this<span class=\"token punctuation\">.<\/span>z<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">var<\/span> p <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> Point<span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\np<span class=\"token punctuation\">.<\/span>print<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span> alert <span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><\/p>\n<p>&#8230; which in Javascript compiles to:<\/p>\n<p><\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token keyword\">var<\/span> __extends <span class=\"token operator\">=<\/span> this<span class=\"token punctuation\">.<\/span>__extends <span class=\"token operator\">||<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> b<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">function<\/span> __<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> this<span class=\"token punctuation\">.<\/span>constructor <span class=\"token operator\">=<\/span> d<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span>\r\n    __<span class=\"token punctuation\">.<\/span>prototype <span class=\"token operator\">=<\/span> b<span class=\"token punctuation\">.<\/span>prototype<span class=\"token punctuation\">;<\/span>\r\n    d<span class=\"token punctuation\">.<\/span>prototype <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> __<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">var<\/span> Point <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">function<\/span> Point<span class=\"token punctuation\">(<\/span>x<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        this<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">=<\/span> x<span class=\"token punctuation\">;<\/span>\r\n        this<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">=<\/span> y<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    Point<span class=\"token punctuation\">.<\/span>prototype<span class=\"token punctuation\">.<\/span>sqrt <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">return<\/span> Math<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>this<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> this<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">+<\/span> this<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">*<\/span> this<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n    Point<span class=\"token punctuation\">.<\/span>prototype<span class=\"token punctuation\">.<\/span>print <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span>callback<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        setTimeout<span class=\"token punctuation\">(<\/span>callback<span class=\"token punctuation\">,<\/span> <span class=\"token number\">3000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> Point<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">var<\/span> Point3D <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span>_super<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    __extends<span class=\"token punctuation\">(<\/span>Point3D<span class=\"token punctuation\">,<\/span> _super<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">function<\/span> Point3D<span class=\"token punctuation\">(<\/span>x<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">,<\/span> z<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        _super<span class=\"token punctuation\">.<\/span>call<span class=\"token punctuation\">(<\/span>this<span class=\"token punctuation\">,<\/span> x<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    Point3D<span class=\"token punctuation\">.<\/span>prototype<span class=\"token punctuation\">.<\/span>sqrt <span class=\"token operator\">=<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">var<\/span> d <span class=\"token operator\">=<\/span> _super<span class=\"token punctuation\">.<\/span>prototype<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">.<\/span>call<span class=\"token punctuation\">(<\/span>this<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token keyword\">return<\/span> Math<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>d <span class=\"token operator\">*<\/span> d <span class=\"token operator\">+<\/span> this<span class=\"token punctuation\">.<\/span>z <span class=\"token operator\">*<\/span> this<span class=\"token punctuation\">.<\/span>z<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> Point3D<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span>Point<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">var<\/span> p <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> Point<span class=\"token punctuation\">(<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\np<span class=\"token punctuation\">.<\/span>print<span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    alert<span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p><\/p>\n<p>Analyzing the code we observe that it share almost the same principle like any other static type language. We declare the class, it&#8217;s variables and functions, which can be <kbd>static<\/kbd>, <kbd>private<\/kbd> and <kbd>public<\/kbd>. By default the declared functions and variables are public, but we can make them private or static, by placing the <kbd>private<\/kbd> or <kbd>static<\/kbd> keyword in front of them. TS supports the constructor functions, which we declare in the following format:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\">var1<span class=\"token punctuation\">:<\/span>type<span class=\"token punctuation\">;<\/span>\r\nvar2<span class=\"token punctuation\">:<\/span>type<span class=\"token punctuation\">;<\/span>\r\nconstructor <span class=\"token punctuation\">(<\/span>var1<span class=\"token punctuation\">:<\/span>type<span class=\"token punctuation\">,<\/span> var2<span class=\"token punctuation\">:<\/span>type<span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>varn<span class=\"token punctuation\">:<\/span>type<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n       this<span class=\"token punctuation\">.<\/span>var1 <span class=\"token operator\">=<\/span> var1<span class=\"token punctuation\">;<\/span>\r\n       this<span class=\"token punctuation\">.<\/span>var2 <span class=\"token operator\">=<\/span> var2<span class=\"token punctuation\">;<\/span>\r\n       <span class=\"token punctuation\">.<\/span>\r\n       <span class=\"token punctuation\">.<\/span>\r\n       <span class=\"token punctuation\">.<\/span>\r\n       this<span class=\"token punctuation\">.<\/span>varn <span class=\"token operator\">=<\/span> varn<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>It&#8217;s possible to declare the constructor arguments type as public and then we can eliminate to assign the constructor function parameters to constructor&#8217;s variables.<\/p>\n<p>Typescript facilitates the working with classes by introducing another two great features commonly used in OOP, namely the inheritance and class extension. I rewrite the above code sample to show with a few simple changes we can extend the existing code to embrace some advanced polymorphism methods:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\">class Point <span class=\"token punctuation\">{<\/span>\r\n\tx<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\ty<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\t\r\n\tconstructor<span class=\"token punctuation\">(<\/span>x<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">=<\/span> x<span class=\"token punctuation\">;<\/span>\r\n\t\tthis<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">=<\/span> y<span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n\tsqrt<span class=\"token punctuation\">(<\/span>x<span class=\"token punctuation\">:<\/span>number<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">:<\/span>number<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>number <span class=\"token punctuation\">{<\/span>\t\t\r\n\t\t<span class=\"token keyword\">return<\/span> Math<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>x <span class=\"token operator\">*<\/span> x <span class=\"token operator\">+<\/span> y <span class=\"token operator\">*<\/span> y<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n\tdist<span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">:<\/span>Point<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>number <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">var<\/span> dx<span class=\"token punctuation\">:<\/span> number <span class=\"token operator\">=<\/span> this<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">-<\/span> p<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">var<\/span> dy<span class=\"token punctuation\">:<\/span> number <span class=\"token operator\">=<\/span> this<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">-<\/span> p<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">;<\/span>\r\n\t\t\r\n\t\t<span class=\"token keyword\">return<\/span> this<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>dx<span class=\"token punctuation\">,<\/span> dy<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n\tprint<span class=\"token punctuation\">(<\/span>callback<span class=\"token operator\">?<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\t\t \r\n\t\tsetTimeout<span class=\"token punctuation\">(<\/span>callback<span class=\"token punctuation\">,<\/span> <span class=\"token number\">3000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nclass Point3D extends Point <span class=\"token punctuation\">{<\/span>\t\r\n\tz <span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">;<\/span>\r\n\t\r\n\tconstructor <span class=\"token punctuation\">(<\/span> x<span class=\"token punctuation\">:<\/span>number<span class=\"token punctuation\">,<\/span>  y<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">,<\/span> z<span class=\"token punctuation\">:<\/span> number<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\tsuper<span class=\"token punctuation\">(<\/span>x<span class=\"token punctuation\">,<\/span> y<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n\t\r\n\tsqrt3<span class=\"token punctuation\">(<\/span>z<span class=\"token punctuation\">:<\/span>number<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">var<\/span> s <span class=\"token operator\">=<\/span> super<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>this<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">,<\/span> this<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token keyword\">return<\/span> Math<span class=\"token punctuation\">.<\/span>sqrt<span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">*<\/span> s <span class=\"token operator\">+<\/span> this<span class=\"token punctuation\">.<\/span>z <span class=\"token operator\">*<\/span> this<span class=\"token punctuation\">.<\/span>z<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\t\t\r\n\t<span class=\"token punctuation\">}<\/span>\t\r\n\t\t\r\n\tdist<span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">:<\/span>Point3D<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>number <span class=\"token punctuation\">{<\/span>\r\n\t\t<span class=\"token keyword\">var<\/span> d <span class=\"token operator\">=<\/span> super<span class=\"token punctuation\">.<\/span>dist<span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\t\t\r\n\t\t<span class=\"token keyword\">var<\/span> dz<span class=\"token punctuation\">:<\/span> number <span class=\"token operator\">=<\/span> this<span class=\"token punctuation\">.<\/span>z <span class=\"token operator\">-<\/span> p<span class=\"token punctuation\">.<\/span>z<span class=\"token punctuation\">;<\/span>\t\t\t\t\t\t\t\t\t\t\r\n\t\t<span class=\"token keyword\">return<\/span> this<span class=\"token punctuation\">.<\/span>sqrt3<span class=\"token punctuation\">(<\/span>dz<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">var<\/span> p <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> Point3D<span class=\"token punctuation\">(<\/span><span class=\"token number\">19<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">20<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\np<span class=\"token punctuation\">.<\/span>print<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span> alert <span class=\"token punctuation\">(<\/span>p<span class=\"token punctuation\">.<\/span>dist<span class=\"token punctuation\">(<\/span><span class=\"token keyword\">new<\/span> Point3D<span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<\/p>\n<h4>Modules<\/h4>\n<p>The last topic i want to discuss is about <em>modules<\/em>. Typescript module implementation is closely aligned with ECMAScript 6 proposal and supports code generation, targeting AMD and CommonJS modules. There are two types of <em>source files<\/em> Typescript is supporting: <strong>implementation source files<\/strong> and <strong>declaration source files<\/strong>. The difference between the two is that the first one contains statements and declarations, on the other hand the second contains only declarations. These can be used to declare static type information associated with existing javascript code. By default, a JavaScript output file is generated for each implementation source file in a compilation, but no output is generated from declaration source files.<\/p>\n<p>The scope of modules is to maintain a clean structure in our code and to prevent the global namespace pollution. If suppose i have to create a global function <code>Main<\/code> the way i do in Javascript without to override the function at a later stage is to assure that the <code>Main<\/code> function get initialized only once. This is a common technique widespread among JS developers. In TS we do in the following way:<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\">module net<span class=\"token punctuation\">.<\/span>esimov<span class=\"token punctuation\">.<\/span>core <span class=\"token punctuation\">{<\/span>\r\n\texport class Main <span class=\"token punctuation\">{<\/span>\r\n\t\tpublic name<span class=\"token punctuation\">:<\/span> string<span class=\"token punctuation\">;<\/span>\r\n\t\tpublic interest<span class=\"token punctuation\">:<\/span> string<span class=\"token punctuation\">;<\/span>\r\n\t\t\r\n\t\tconstructor<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t\tthis<span class=\"token punctuation\">.<\/span>name <span class=\"token operator\">=<\/span> <span class=\"token string\">\"esimov\"<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t\tthis<span class=\"token punctuation\">.<\/span>interest <span class=\"token operator\">=<\/span> <span class=\"token string\">\"web technology\"<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token punctuation\">}<\/span>\r\n\t\t\r\n\t\tputs<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n\t\t\tconsole<span class=\"token punctuation\">.<\/span>log<span class=\"token punctuation\">(<\/span>this<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span> <span class=\"token string\">\" like\"<\/span><span class=\"token punctuation\">,<\/span> this<span class=\"token punctuation\">.<\/span>interest<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\t\t<span class=\"token punctuation\">}<\/span>\r\n\t<span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Importing the declaration files is simple as placing the following statement on the top of our code: <code>\/\/\/ &lt;reference path=\"...\";\/&gt;<\/code>. Then with a simple <kbd>import<\/kbd> statement we&#8217;ll import the modules needed at one specific moment.<\/p>\n<pre class=\" language-javascript\"><code class=\" language-javascript\">import Core <span class=\"token operator\">=<\/span> net<span class=\"token punctuation\">.<\/span>esimov<span class=\"token punctuation\">.<\/span>core<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">var<\/span> c <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> Core<span class=\"token punctuation\">.<\/span>Main<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<\/p>\n<h2>Final thoughts<\/h2>\n<p>Typescript is a language that is definitely worth to try it. Unfortunately it has one main disadvantage, namely to benefit from it&#8217;s strong typing features we need to declare and construct declaration files for libraries we want to include in our projects. There are predefined declaration files for <code>jQuery<\/code>, <code>node.js<\/code> and <code>d3.js<\/code>, just to mention a few, but hopefully as the community will grow this list will get bigger and bigger.<\/p>\n<p><p>Another weak point is the lack of support from IDE&#8217;s other than MS Visual Studio, but fortunately Webstorm 6 has in perspective to include full type support for Typescript too.<\/p>\n<\/p>\n<h2>What&#8217;s next?<\/h2>\n<p>With this introduction done, my intention is to put into real usage all the information and learning accumulated and trying to create some canvas experiments but this time using Typescript. So check out soon.<\/p>\n<h2> Other resources to check<\/h2>\n<\/p>\n<ul>\n<li><a href=\"http:\/\/typescript.codeplex.com\/\">Codeplex<\/a> &#8211; project hosting<\/li>\n<li><a href=\"http:\/\/www.typescriptlang.org\/Playground\/\">Typescript playground<\/a> &#8211; Playground for online experimentation<\/li>\n<li><a href=\"http:\/\/jessewarden.com\/2012\/10\/typescript-for-actionscript-developers.html\">TypeScript for ActionScript Developers<\/a> &#8211; back-to-back comparison with AS2\/AS3<\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/tagged\/javascript\">Support for Typescript on Stackoverflow<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The first question that may arise is what is Typescript? The answer is: Typescript is a superset of JavaScript which compiles to JavaScript at runtime, all while maintaining your existing code and using the existing libraries. <\/p>\n","protected":false},"author":1,"featured_media":649,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47,20,42,41,21,40],"tags":[44,51,50,43,46],"class_list":["post-514","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-javascript","category-language","category-programming","category-tutorials","category-typescript","tag-javascript-2","tag-language-2","tag-programming-2","tag-typescript-2","tag-web"],"_links":{"self":[{"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/posts\/514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/comments?post=514"}],"version-history":[{"count":0,"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/posts\/514\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/media\/649"}],"wp:attachment":[{"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/media?parent=514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/categories?post=514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esimov.com\/blog\/wp-json\/wp\/v2\/tags?post=514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}