<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>typescript Wiki Rss Feed</title><link>https://typescript.codeplex.com/</link><description>typescript Wiki Rss Description</description><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27534</link><description>&amp;#64;mihailik&amp;#10;&amp;#10;Thanks, I&amp;#39;m actually aware that you can use lambdas like that, my hope was to get the ability to use functions like that as well.&amp;#10;&amp;#10;Lambdas stored in a var cause a few problems in my opinion&amp;#58; they don&amp;#39;t work for inheritance, they&amp;#39;re mutable so they can be changed, they can have order of initialization problems, and they don&amp;#39;t contain any sort of name property to identify them, which is bad for call stacks, and metaprogramming.&amp;#10;&amp;#10;I really like the use of short functions that return their results immediately.  For me, limiting yourself to a single computational result for a function is a great way to increase the modularity, and composability of your functions.  It gets even better when you can partially apply functions to set up context, and then invoke them later with the rest of the arguments.&amp;#10;&amp;#10;I&amp;#39;ve been using this technique along with the fact that you can extract the name of named functions as a type safe mapping layer between my client and server side code, as well as for handling routing page rendering in the client side. Without the named arrow functions, my code will unfortunately get much longer and more cumbersome.&amp;#10;&amp;#10;I&amp;#39;m sure that these things are probably much more of a concern to me than they are to other people, but I figured I&amp;#39;d mention them anyways &amp;#58;D</description><author>dlshryock</author><pubDate>Mon, 20 May 2013 14:52:34 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130520025234P</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27517</link><description>Almost precisely that lambda is what&amp;#39;s supported today&amp;#58;&amp;#10;&amp;#10;var addOne &amp;#61; &amp;#40;n&amp;#58; number&amp;#41; &amp;#61;&amp;#62; n&amp;#43;1&amp;#59;&amp;#10;var x&amp;#58; &amp;#40;a,b&amp;#41; &amp;#61;&amp;#62; &amp;#40;c,d&amp;#41; &amp;#61;&amp;#62; a&amp;#43;b&amp;#43;c&amp;#43;d&amp;#10;&amp;#10;class A&amp;#123;&amp;#10;private _name&amp;#58;string&amp;#59;&amp;#10;greeting&amp;#58; &amp;#40;&amp;#41; &amp;#61;&amp;#62; &amp;#34;Hello, &amp;#34;&amp;#43;name&amp;#59;&amp;#10;&amp;#125;</description><author>mihailik</author><pubDate>Sat, 18 May 2013 08:50:40 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130518085040A</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27515</link><description>Is there any possibility of returning the ability to write functions like lambdas&amp;#63;&amp;#10;&amp;#10;for example, it was to be possible to write the following prior to the 0.9 alpha&amp;#58;&amp;#10;&amp;#10;function addOne&amp;#40;n&amp;#58;number&amp;#41; &amp;#61;&amp;#62; n&amp;#43;1&amp;#59;&amp;#10;&amp;#10;It probably doesn&amp;#39;t seem very important for simple cases like the above, but it is extremely useful if you are doing function currying &amp;#47; partial application&amp;#58;&amp;#10;&amp;#10;function x&amp;#40;a,b&amp;#41; &amp;#61;&amp;#62; &amp;#40;c,d&amp;#41; &amp;#61;&amp;#62; a&amp;#43;b&amp;#43;c&amp;#43;d&amp;#59;&amp;#10;&amp;#10;would have to become&amp;#58;&amp;#10;function x&amp;#40;a,b&amp;#41;&amp;#123;return function&amp;#40;c,d&amp;#41;&amp;#123; return a&amp;#43;b&amp;#43;c&amp;#43;d&amp;#59;&amp;#125; &amp;#125;&amp;#10;&amp;#10;a fully curried function&amp;#58;&amp;#10;function x&amp;#40;a&amp;#41; &amp;#61;&amp;#62; &amp;#40;b&amp;#41; &amp;#61;&amp;#62; &amp;#40;c&amp;#41; &amp;#61;&amp;#62; &amp;#40;d&amp;#41; &amp;#61;&amp;#62; a&amp;#43;b&amp;#43;c&amp;#43;d&amp;#59;&amp;#10;would have to be&amp;#58;&amp;#10;function&amp;#40;a&amp;#41;&amp;#123;return function&amp;#40;b&amp;#41;&amp;#123;return function&amp;#40;c&amp;#41;&amp;#123;return function&amp;#40;d&amp;#41;&amp;#123; return a&amp;#43;b&amp;#43;c&amp;#43;d&amp;#59; &amp;#125; &amp;#125; &amp;#125; &amp;#125;&amp;#10;&amp;#10;It gets worse and worse the more you want to break argument lists apart.&amp;#10;&amp;#10;And yes, I am using the arrow functions in real life production application, and would prefer them to be real named functions, not lambda variables &amp;#58;D&amp;#10;&amp;#10;I would even like to go so far as to ask for their support as methods&amp;#58;&amp;#10;&amp;#10;class A&amp;#123;&amp;#10;  private _name&amp;#58;string&amp;#59;&amp;#10;  greeting&amp;#40;&amp;#41; &amp;#61;&amp;#62; &amp;#34;Hello, &amp;#34;&amp;#43;name&amp;#59;&amp;#10;&amp;#125;</description><author>dlshryock</author><pubDate>Fri, 17 May 2013 21:27:19 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130517092719P</guid></item><item><title>Updated Wiki: Known breaking changes between 0.8 and 0.9</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;version=12</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Known breaking changes between 0.8 and 0.9&lt;/h1&gt;
The 0.9.x series introduces breaking changes to help the language mature, align with the ECMAScript 5 standard and ECMAScript 6 draft recommendations, and general alignment of the compiler with the spec itself.  While we try to limit the number of breaking changes, it’s important to make necessary changes now, before the language and tools reach 1.0.  &lt;br /&gt;&lt;br /&gt;Below is the list of currently known breaking changes.&lt;br /&gt;
&lt;h2&gt;Tightening of compiler to spec&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; There was functionality allowed by the 0.8.3 compiler that was not explicitly allowed by the spec (eg, exploiting patterns of access modifiers to simulate ‘protected’).  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We tightened the compiler to follow the spec more closely to avoid code that relies on a “loose” compiler implementation.  &lt;br /&gt;
&lt;h2&gt;The type ‘bool’ is now ‘boolean’&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The name of the Boolean type was initially ‘bool’.  During 0.9.0, ‘bool’ will be marked as deprecated, preferring instead the name ‘boolean’.  As of 0.9.1, ‘bool’ will no longer be accepted.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The official name for the Boolean type in ECMAScript is ‘boolean’.  The ‘bool’ type name is being changed to align with the standard, based on &lt;a href="https://typescript.codeplex.com/workitem/135"&gt;user feedback&lt;/a&gt;.&lt;br /&gt; 
&lt;h2&gt;The ‘module’ keyword no longer creates a type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, a clearer distinction is made between roles of namespaces, types, and values.  Modules now contribute only to namespaces and values and will no longer contribute a type.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This simplification of the role of modules allow modules to now extend classes and functions more easily.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to ‘Array’ type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, the type of Array is now generic.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The Array type was less specialized before.  Now, with the advent of generics, we can allow for a more precise typing of Array contents.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to syntax parsing&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, a difference in how syntax is parsed was introduced.  This may affect some forms of syntax that previously parsed as acceptable ES5.  Specifically, the following example will no longer be parsed as a comma-delimited expression of two comparisons, but instead as an invocation of a generic function with two arguments:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
myfun&amp;lt;x,y&amp;gt;(z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To make this unambiguously an expression, use parentheses.  For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
(myfun &amp;lt; x), y &amp;gt; (z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We follow the precedence set by other languages with regards to syntax for generics.  Unfortunately, this does lead to ambiguities in a few cases.&lt;br /&gt; 
&lt;h2&gt;Overload declarations must immediately precede implementation&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series was more lax about what was allowed between overload declaration and its implementation&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Indexers must have full type annotation now&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
interface a1 {
    [n: number];  //&amp;lt;-- was allowed in 0.8.x, now an error
}
interface a1 {
    [n: number]: string;  //&amp;lt;-- correctly specifies return type, valid in 0.8.x and 0.9.x
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Statics must be fully-qualified&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; Previously you could optionally not qualify a static member access when inside a static member definition&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Just as classes require “this.”, statics will require “&amp;lt;Class name&amp;gt;.” to denote where the symbol comes from&lt;br /&gt; 
&lt;h2&gt;No longer accept semicolon at the end of methods&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
class Todo extends Backbone.Model {
 
    // Default attributes for the todo.
    defaults() {
        return {
            content: &amp;quot;empty todo...&amp;quot;,
            done: false
        }
    };
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This may be from following the syntax more strictly in the 0.9.0 fidelity parser.  We may soften this restriction in the future.&lt;br /&gt; 
&lt;h2&gt;No longer accept &amp;quot;new number[]&amp;quot;&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In the 0.8.x series, we allowed some exceptions to the rule that an expression should follow &amp;#39;new&amp;#39;.  Here we allowed the type &amp;quot;number[]&amp;quot; to follow new.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This was accidentally allowed in the 0.8.x compiler.  As part of the 0.9.x work, we&amp;#39;re tightening the compiler, and in doing so no longer allow this.&lt;br /&gt; 
&lt;h2&gt;&amp;#39;declare&amp;#39; now required for top level non-interface declarations in .d.ts files&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series had a lot of lenience in the .d.ts file syntax.  We want to tighten the syntax.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Loose syntax rules are confusing to users and lead to inconsistent .d.ts files.  &lt;br /&gt;
&lt;h2&gt;The node.d.ts distributed with 0.8 is not compatible with 0.9&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The &amp;#39;node.d.ts&amp;#39; distributed as part of 0.8 samples is no longer compatible.  Use the up-to-date node.d.ts distributed with the 0.9 samples.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This is an effect of the &amp;quot;modules no longer create a type&amp;quot; simplification&lt;br /&gt; 
&lt;h2&gt;String indexers constrain the types of members on the interface&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;  A string indexer with element type Foo is a constraint that all members of the interface will have types compatible with Foo.  The only exception is that members implicitly inherited from Object which can be called on any object type continue to have the type provided in Object unless explicitly overridden.  So this:&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        hasOwnProperty(eventName: string): bool;
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;Can be changed to this without changes to consumers of the interface (that is, they can keep using .hasOwnProperty).&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt;  String indexers are unified with property lookup in 0.9, so that foo.bar and foo[&amp;quot;bar&amp;quot;] behave the same.&lt;br /&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>jonturner</author><pubDate>Tue, 14 May 2013 18:50:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Known breaking changes between 0.8 and 0.9 20130514065039P</guid></item><item><title>New Comment on "Roadmap"</title><link>https://typescript.codeplex.com/wikipage?title=Roadmap&amp;ANCHOR#C27432</link><description>I would also love to see a timeline, by quater is fine to me. Thanks for this great language &amp;#58;&amp;#41;</description><author>TobiasHei</author><pubDate>Thu, 09 May 2013 11:26:16 GMT</pubDate><guid isPermaLink="false">New Comment on "Roadmap" 20130509112616A</guid></item><item><title>New Comment on "Roadmap"</title><link>https://typescript.codeplex.com/wikipage?title=Roadmap&amp;ANCHOR#C27417</link><description>I can&amp;#39;t see why there is no answer for a question that is asked many may times. as here about timeline for roadmap versions.&amp;#10;Please provide some dates.</description><author>elhajjh</author><pubDate>Wed, 08 May 2013 12:34:15 GMT</pubDate><guid isPermaLink="false">New Comment on "Roadmap" 20130508123415P</guid></item><item><title>New Comment on "Roadmap"</title><link>https://typescript.codeplex.com/wikipage?title=Roadmap&amp;ANCHOR#C27416</link><description>I can&amp;#39;t see why there is no answer for a question that is asked many may times. as here about timeline for roadmap versions.</description><author>elhajjh</author><pubDate>Wed, 08 May 2013 12:33:22 GMT</pubDate><guid isPermaLink="false">New Comment on "Roadmap" 20130508123322P</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27378</link><description>https&amp;#58;&amp;#47;&amp;#47;typescript.codeplex.com&amp;#47;releases&amp;#47;view&amp;#47;105503&amp;#10;Here you have installer and specification</description><author>NN</author><pubDate>Fri, 03 May 2013 17:59:20 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130503055920P</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27377</link><description>marcocenz , the spec is in the repository&amp;#58; https&amp;#58;&amp;#47;&amp;#47;typescript.codeplex.com&amp;#47;SourceControl&amp;#47;BrowseLatest&amp;#10;Just choose &amp;#34;develop&amp;#34; branch.</description><author>NN</author><pubDate>Fri, 03 May 2013 17:56:49 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130503055649P</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27356</link><description>There is an updated version of the Language specifications&amp;#63;&amp;#10;The only one I&amp;#39;ve found is of October 2012 for Language version 0.8.0 &amp;#58;-&amp;#40;</description><author>marcocenz</author><pubDate>Wed, 01 May 2013 09:03:52 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130501090352A</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27340</link><description>I love these improvements. Specially tightening the .d.ts definitions, it was becoming confusing.</description><author>omidkrad</author><pubDate>Mon, 29 Apr 2013 20:12:36 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130429081236P</guid></item><item><title>New Comment on "Compile-on-Save"</title><link>https://typescript.codeplex.com/wikipage?title=Compile-on-Save&amp;ANCHOR#C27295</link><description>this feature doesn&amp;#39;t work in 0.9 anymore</description><author>middlewest</author><pubDate>Wed, 24 Apr 2013 20:14:58 GMT</pubDate><guid isPermaLink="false">New Comment on "Compile-on-Save" 20130424081458P</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27284</link><description>Thanks, oisin.  Fixed.</description><author>jonturner</author><pubDate>Tue, 23 Apr 2013 18:14:43 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130423061443P</guid></item><item><title>Updated Wiki: Known breaking changes between 0.8 and 0.9</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;version=11</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Known breaking changes between 0.8 and 0.9&lt;/h1&gt;
The 0.9.x series introduces breaking changes to help the language mature, align with the ECMAScript 5 standard and ECMAScript 6 draft recommendations, and general alignment of the compiler with the spec itself.  While we try to limit the number of breaking changes, it’s important to make necessary changes now, before the language and tools reach 1.0.  &lt;br /&gt;&lt;br /&gt;Below is the list of currently known breaking changes.&lt;br /&gt;
&lt;h2&gt;Tightening of compiler to spec&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; There was functionality allowed by the 0.8.3 compiler that was not explicitly allowed by the spec (eg, exploiting patterns of access modifiers to simulate ‘protected’).  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We tightened the compiler to follow the spec more closely to avoid code that relies on a “loose” compiler implementation.  &lt;br /&gt;
&lt;h2&gt;The type ‘bool’ is now ‘boolean’&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The name of the Boolean type was initially ‘bool’.  During 0.9.0, ‘bool’ will be marked as deprecated, preferring instead the name ‘boolean’.  As of 0.9.1, ‘bool’ will no longer be accepted.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The official name for the Boolean type in ECMAScript is ‘boolean’.  The ‘bool’ type name is being changed to align with the standard, based on &lt;a href="https://typescript.codeplex.com/workitem/135"&gt;user feedback&lt;/a&gt;.&lt;br /&gt; 
&lt;h2&gt;The ‘module’ keyword no longer creates a type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, a clearer distinction is made between roles of namespaces, types, and values.  Modules now contribute only to namespaces and values and will no longer contribute a type.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This simplification of the role of modules allow modules to now extend classes and functions more easily.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to ‘Array’ type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, the type of Array is now generic.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The Array type was less specialized before.  Now, with the advent of generics, we can allow for a more precise typing of Array contents.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to syntax parsing&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, a difference in how syntax is parsed was introduced.  This may affect some forms of syntax that previously parsed as acceptable ES5.  Specifically, the following example will no longer be parsed as a comma-delimited expression of two comparisons, but instead as an invocation of a generic function with two arguments:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
myfun&amp;lt;x,y&amp;gt;(z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To make this unambiguously an expression, use parentheses.  For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
(myfun &amp;lt; x), y &amp;gt; (z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We follow the precedence set by other languages with regards to syntax for generics.  Unfortunately, this does lead to ambiguities in a few cases.&lt;br /&gt; 
&lt;h2&gt;Overload declarations must immediately precede implementation&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series was more lax about what was allowed between overload declaration and its implementation&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Indexers must have full type annotation now&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
interface a1 {
    [n: number];  //&amp;lt;-- was allowed in 0.8.x, now an error
}
interface a1 {
    [n: number]: string;  //&amp;lt;-- correctly specifies return type, valid in 0.8.x and 0.9.x
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Statics must be fully-qualified&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; Previously you could optionally not qualify a static member access when inside a static member definition&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Just as classes require “this.”, statics will require “&amp;lt;Class name&amp;gt;.” to denote where the symbol comes from&lt;br /&gt; 
&lt;h2&gt;No longer accept semicolon at the end of methods&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
class Todo extends Backbone.Model {
 
    // Default attributes for the todo.
    defaults() {
        return {
            content: &amp;quot;empty todo...&amp;quot;,
            done: false
        }
    };
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This may be from following the syntax more strictly in the 0.9.0 fidelity parser.  We may soften this restriction in the future.&lt;br /&gt; 
&lt;h2&gt;No longer accept &amp;quot;new number[]&amp;quot;&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In the 0.8.x series, we allowed some exceptions to the rule that an expression should follow &amp;#39;new&amp;#39;.  Here we allowed the type &amp;quot;number[]&amp;quot; to follow new.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This was accidentally allowed in the 0.8.x compiler.  As part of the 0.9.x work, we&amp;#39;re tightening the compiler, and in doing so no longer allow this.&lt;br /&gt; 
&lt;h2&gt;&amp;#39;declare&amp;#39; now required for top level non-interface declarations in .d.ts files&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series had a lot of lenience in the .d.ts file syntax.  We want to tighten the syntax.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Loose syntax rules are confusing to users and lead to inconsistent .d.ts files.  &lt;br /&gt; 
&lt;h2&gt;String indexers constrain the types of members on the interface&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;  A string indexer with element type Foo is a constraint that all members of the interface will have types compatible with Foo.  The only exception is that members implicitly inherited from Object which can be called on any object type continue to have the type provided in Object unless explicitly overridden.  So this:&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        hasOwnProperty(eventName: string): bool;
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;Can be changed to this without changes to consumers of the interface (that is, they can keep using .hasOwnProperty).&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt;  String indexers are unified with property lookup in 0.9, so that foo.bar and foo[&amp;quot;bar&amp;quot;] behave the same.&lt;br /&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>jonturner</author><pubDate>Tue, 23 Apr 2013 18:14:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Known breaking changes between 0.8 and 0.9 20130423061429P</guid></item><item><title>New Comment on "Known breaking changes between 0.8 and 0.9"</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;ANCHOR#C27279</link><description>You accidentally linked to a new page with your indexer example. It should be&amp;#58;&amp;#10;&amp;#10;foo.bar and foo&amp;#91; &amp;#34;bar&amp;#34; &amp;#93;</description><author>oisin</author><pubDate>Tue, 23 Apr 2013 14:11:13 GMT</pubDate><guid isPermaLink="false">New Comment on "Known breaking changes between 0.8 and 0.9" 20130423021113P</guid></item><item><title>New Comment on "Roadmap"</title><link>https://typescript.codeplex.com/wikipage?title=Roadmap&amp;ANCHOR#C27276</link><description>Can you check &amp;#34;macros&amp;#34; into 1.x as that would drive alot of innovation from the community. &amp;#58;-&amp;#41;</description><author>davidhanson90</author><pubDate>Tue, 23 Apr 2013 13:02:23 GMT</pubDate><guid isPermaLink="false">New Comment on "Roadmap" 20130423010223P</guid></item><item><title>Updated Wiki: Known breaking changes between 0.8 and 0.9</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;version=10</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Known breaking changes between 0.8 and 0.9&lt;/h1&gt;
The 0.9.x series introduces breaking changes to help the language mature, align with the ECMAScript 5 standard and ECMAScript 6 draft recommendations, and general alignment of the compiler with the spec itself.  While we try to limit the number of breaking changes, it’s important to make necessary changes now, before the language and tools reach 1.0.  &lt;br /&gt;&lt;br /&gt;Below is the list of currently known breaking changes.&lt;br /&gt;
&lt;h2&gt;Tightening of compiler to spec&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; There was functionality allowed by the 0.8.3 compiler that was not explicitly allowed by the spec (eg, exploiting patterns of access modifiers to simulate ‘protected’).  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We tightened the compiler to follow the spec more closely to avoid code that relies on a “loose” compiler implementation.  &lt;br /&gt;
&lt;h2&gt;The type ‘bool’ is now ‘boolean’&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The name of the Boolean type was initially ‘bool’.  During 0.9.0, ‘bool’ will be marked as deprecated, preferring instead the name ‘boolean’.  As of 0.9.1, ‘bool’ will no longer be accepted.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The official name for the Boolean type in ECMAScript is ‘boolean’.  The ‘bool’ type name is being changed to align with the standard, based on &lt;a href="https://typescript.codeplex.com/workitem/135"&gt;user feedback&lt;/a&gt;.&lt;br /&gt; 
&lt;h2&gt;The ‘module’ keyword no longer creates a type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, a clearer distinction is made between roles of namespaces, types, and values.  Modules now contribute only to namespaces and values and will no longer contribute a type.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This simplification of the role of modules allow modules to now extend classes and functions more easily.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to ‘Array’ type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, the type of Array is now generic.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The Array type was less specialized before.  Now, with the advent of generics, we can allow for a more precise typing of Array contents.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to syntax parsing&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, a difference in how syntax is parsed was introduced.  This may affect some forms of syntax that previously parsed as acceptable ES5.  Specifically, the following example will no longer be parsed as a comma-delimited expression of two comparisons, but instead as an invocation of a generic function with two arguments:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
myfun&amp;lt;x,y&amp;gt;(z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To make this unambiguously an expression, use parentheses.  For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
(myfun &amp;lt; x), y &amp;gt; (z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We follow the precedence set by other languages with regards to syntax for generics.  Unfortunately, this does lead to ambiguities in a few cases.&lt;br /&gt; 
&lt;h2&gt;Overload declarations must immediately precede implementation&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series was more lax about what was allowed between overload declaration and its implementation&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Indexers must have full type annotation now&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
interface a1 {
    [n: number];  //&amp;lt;-- was allowed in 0.8.x, now an error
}
interface a1 {
    [n: number]: string;  //&amp;lt;-- correctly specifies return type, valid in 0.8.x and 0.9.x
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Statics must be fully-qualified&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; Previously you could optionally not qualify a static member access when inside a static member definition&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Just as classes require “this.”, statics will require “&amp;lt;Class name&amp;gt;.” to denote where the symbol comes from&lt;br /&gt; 
&lt;h2&gt;No longer accept semicolon at the end of methods&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
class Todo extends Backbone.Model {
 
    // Default attributes for the todo.
    defaults() {
        return {
            content: &amp;quot;empty todo...&amp;quot;,
            done: false
        }
    };
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This may be from following the syntax more strictly in the 0.9.0 fidelity parser.  We may soften this restriction in the future.&lt;br /&gt; 
&lt;h2&gt;No longer accept &amp;quot;new number[]&amp;quot;&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In the 0.8.x series, we allowed some exceptions to the rule that an expression should follow &amp;#39;new&amp;#39;.  Here we allowed the type &amp;quot;number[]&amp;quot; to follow new.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This was accidentally allowed in the 0.8.x compiler.  As part of the 0.9.x work, we&amp;#39;re tightening the compiler, and in doing so no longer allow this.&lt;br /&gt; 
&lt;h2&gt;&amp;#39;declare&amp;#39; now required for top level non-interface declarations in .d.ts files&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series had a lot of lenience in the .d.ts file syntax.  We want to tighten the syntax.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Loose syntax rules are confusing to users and lead to inconsistent .d.ts files.  &lt;br /&gt; 
&lt;h2&gt;String indexers constrain the types of members on the interface&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;  A string indexer with element type Foo is a constraint that all members of the interface will have types compatible with Foo.  The only exception is that members implicitly inherited from Object which can be called on any object type continue to have the type provided in Object unless explicitly overridden.  So this:&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        hasOwnProperty(eventName: string): bool;
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;Can be changed to this without changes to consumers of the interface (that is, they can keep using .hasOwnProperty).&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt;  String indexers are unified with property lookup in 0.9, so that foo.bar and foo&lt;a href="https://typescript.codeplex.com/wikipage?title=%22bar%22&amp;referringTitle=Known%20breaking%20changes%20between%200.8%20and%200.9"&gt;&amp;#34;bar&amp;#34;&lt;/a&gt; behave the same.&lt;br /&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>danquirk</author><pubDate>Mon, 22 Apr 2013 21:35:34 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Known breaking changes between 0.8 and 0.9 20130422093534P</guid></item><item><title>Updated Wiki: Known breaking changes between 0.8 and 0.9</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;version=9</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Known breaking changes between 0.8 and 0.9&lt;/h1&gt;
The 0.9.x series introduces breaking changes to help the language mature, align with the ECMAScript 5 standard and ECMAScript 6 draft recommendations, and general alignment of the compiler with the spec itself.  While we try to limit the number of breaking changes, it’s important to make necessary changes now, before the language and tools reach 1.0.  &lt;br /&gt;&lt;br /&gt;Below is the list of currently known breaking changes.&lt;br /&gt;
&lt;h2&gt;Tightening of compiler to spec&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; There was functionality allowed by the 0.8.3 compiler that was not explicitly allowed by the spec (eg, exploiting patterns of access modifiers to simulate ‘protected’).  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We tightened the compiler to follow the spec more closely to avoid code that relies on a “loose” compiler implementation.  &lt;br /&gt;
&lt;h2&gt;The type ‘bool’ is now ‘boolean’&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The name of the Boolean type was initially ‘bool’.  During 0.9.0, ‘bool’ will be marked as deprecated, preferring instead the name ‘boolean’.  As of 0.9.1, ‘bool’ will no longer be accepted.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The official name for the Boolean type in ECMAScript is ‘boolean’.  The ‘bool’ type name is being changed to align with the standard, based on &lt;a href="https://typescript.codeplex.com/workitem/135"&gt;user feedback&lt;/a&gt;.&lt;br /&gt; 
&lt;h2&gt;The ‘module’ keyword no longer creates a type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, a clearer distinction is made between roles of namespaces, types, and values.  Modules now contribute only to namespaces and values and will no longer contribute a type.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This simplification of the role of modules allow modules to now extend classes and functions more easily.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to ‘Array’ type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, the type of Array is now generic.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The Array type was less specialized before.  Now, with the advent of generics, we can allow for a more precise typing of Array contents.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to syntax parsing&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, a difference in how syntax is parsed was introduced.  This may affect some forms of syntax that previously parsed as acceptable ES5.  Specifically, the following example will no longer be parsed as a comma-delimited expression of two comparisons, but instead as an invocation of a generic function with two arguments:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
myfun&amp;lt;x,y&amp;gt;(z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To make this unambiguously an expression, use parentheses.  For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
(myfun &amp;lt; x), y &amp;gt; (z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We follow the precedence set by other languages with regards to syntax for generics.  Unfortunately, this does lead to ambiguities in a few cases.&lt;br /&gt; 
&lt;h2&gt;Overload declarations must immediately precede implementation&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series was more lax about what was allowed between overload declaration and its implementation&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Indexers must have full type annotation now&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
interface a1 {
    [n: number];  //&amp;lt;-- was allowed in 0.8.x, now an error
}
interface a1 {
    [n: number]: string;  //&amp;lt;-- correctly specifies return type, valid in 0.8.x and 0.9.x
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Statics must be fully-qualified&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; Previous you could optionally not qualify a static member access when inside a static member definition&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Just as classes require “this.”, statics will require “&amp;lt;Class name&amp;gt;.” to denote where the symbol comes from&lt;br /&gt; 
&lt;h2&gt;No longer accept semicolon at the end of methods&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
class Todo extends Backbone.Model {
 
    // Default attributes for the todo.
    defaults() {
        return {
            content: &amp;quot;empty todo...&amp;quot;,
            done: false
        }
    };
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This may be from following the syntax more strictly in the 0.9.0 fidelity parser.  We may soften this restriction in the future.&lt;br /&gt; 
&lt;h2&gt;No longer accept &amp;quot;new number[]&amp;quot;&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In the 0.8.x series, we allowed some exceptions to the rule that an expression should follow &amp;#39;new&amp;#39;.  Here we allowed the type &amp;quot;number[]&amp;quot; to follow new.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This was accidentally allowed in the 0.8.x compiler.  As part of the 0.9.x work, we&amp;#39;re tightening the compiler, and in doing so no longer allow this.&lt;br /&gt; 
&lt;h2&gt;&amp;#39;declare&amp;#39; now required for top level non-interface declarations in .d.ts files&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series had a lot of lenience in the .d.ts file syntax.  We want to tighten the syntax.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Loose syntax rules are confusing to users and lead to inconsistent .d.ts files.  &lt;br /&gt; 
&lt;h2&gt;String indexers constrain the types of members on the interface&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;  A string indexer with element type Foo is a constraint that all members of the interface will have types compatible with Foo.  The only exception is that members implicitly inherited from Object which can be called on any object type continue to have the type provided in Object unless explicitly override.  So this:&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        hasOwnProperty(eventName: string): bool;
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;Can be changed to this without changes to consumers of the interface (that is, they can keep using .hasOwnProperty).&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt;  String indexers are unified with property lookup in 0.9, so that foo.bar and foo&lt;a href="https://typescript.codeplex.com/wikipage?title=%22bar%22&amp;referringTitle=Known%20breaking%20changes%20between%200.8%20and%200.9"&gt;&amp;#34;bar&amp;#34;&lt;/a&gt; behave the same.&lt;br /&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>jonturner</author><pubDate>Mon, 22 Apr 2013 16:14:55 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Known breaking changes between 0.8 and 0.9 20130422041455P</guid></item><item><title>Updated Wiki: Known breaking changes between 0.8 and 0.9</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;version=8</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Known breaking changes between 0.8 and 0.9&lt;/h1&gt;
The 0.9.x series introduces breaking changes to help the language mature, align with the ECMAScript 5 standard and ECMAScript 6 draft recommendations, and general alignment of the compiler with the spec itself.  While we try to limit the number of breaking changes, it’s important to make necessary changes now, before the language and tools reach 1.0.  &lt;br /&gt;&lt;br /&gt;Below is the list of currently known breaking changes.&lt;br /&gt;
&lt;h2&gt;Tightening of compiler to spec&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; There was functionality allowed by the 0.8.3 compiler that was not explicitly allowed by the spec (eg, exploiting patterns of access modifiers to simulate ‘protected’).  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We tightened the compiler to follow the spec more closely to avoid code that relies on a “loose” compiler implementation.  &lt;br /&gt;
&lt;h2&gt;The type ‘bool’ is now ‘boolean’&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The name of the Boolean type was initially ‘bool’.  During 0.9.0, ‘bool’ will be marked as deprecated, preferring instead the name ‘boolean’.  As of 0.9.1, ‘bool’ will no longer be accepted.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The official name for the Boolean type in ECMAScript is ‘boolean’.  The ‘bool’ type name is being changed to align with the standard, based on {url:user feedback|https://typescript.codeplex.com/workitem/135}.&lt;br /&gt; 
&lt;h2&gt;The ‘module’ keyword no longer creates a type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, a clearer distinction is made between roles of namespaces, types, and values.  Modules now contribute only to namespaces and values and will no longer contribute a type.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This simplification of the role of modules allow modules to now extend classes and functions more easily.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to ‘Array’ type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, the type of Array is now generic.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The Array type was less specialized before.  Now, with the advent of generics, we can allow for a more precise typing of Array contents.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to syntax parsing&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, a difference in how syntax is parsed was introduced.  This may affect some forms of syntax that previously parsed as acceptable ES5.  Specifically, the following example will no longer be parsed as a comma-delimited expression of two comparisons, but instead as an invocation of a generic function with two arguments:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
myfun&amp;lt;x,y&amp;gt;(z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To make this unambiguously an expression, use parentheses.  For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
(myfun &amp;lt; x), y &amp;gt; (z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We follow the precedence set by other languages with regards to syntax for generics.  Unfortunately, this does lead to ambiguities in a few cases.&lt;br /&gt; 
&lt;h2&gt;Overload declarations must immediately precede implementation&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series was more lax about what was allowed between overload declaration and its implementation&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Indexers must have full type annotation now&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
interface a1 {
    [n: number];  //&amp;lt;-- was allowed in 0.8.x, now an error
}
interface a1 {
    [n: number]: string;  //&amp;lt;-- correctly specifies return type, valid in 0.8.x and 0.9.x
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Statics must be fully-qualified&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; Previous you could optionally not qualify a static member access when inside a static member definition&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Just as classes require “this.”, statics will require “&amp;lt;Class name&amp;gt;.” to denote where the symbol comes from&lt;br /&gt; 
&lt;h2&gt;No longer accept semicolon at the end of methods&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
class Todo extends Backbone.Model {
 
    // Default attributes for the todo.
    defaults() {
        return {
            content: &amp;quot;empty todo...&amp;quot;,
            done: false
        }
    };
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This may be from following the syntax more strictly in the 0.9.0 fidelity parser.  We may soften this restriction in the future.&lt;br /&gt; 
&lt;h2&gt;No longer accept &amp;quot;new number[]&amp;quot;&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In the 0.8.x series, we allowed some exceptions to the rule that an expression should follow &amp;#39;new&amp;#39;.  Here we allowed the type &amp;quot;number[]&amp;quot; to follow new.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This was accidentally allowed in the 0.8.x compiler.  As part of the 0.9.x work, we&amp;#39;re tightening the compiler, and in doing so no longer allow this.&lt;br /&gt; 
&lt;h2&gt;&amp;#39;declare&amp;#39; now required for top level non-interface declarations in .d.ts files&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series had a lot of lenience in the .d.ts file syntax.  We want to tighten the syntax.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Loose syntax rules are confusing to users and lead to inconsistent .d.ts files.  &lt;br /&gt; 
&lt;h2&gt;String indexers constrain the types of members on the interface&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;  A string indexer with element type Foo is a constraint that all members of the interface will have types compatible with Foo.  The only exception is that members implicitly inherited from Object which can be called on any object type continue to have the type provided in Object unless explicitly override.  So this:&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        hasOwnProperty(eventName: string): bool;
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;Can be changed to this without changes to consumers of the interface (that is, they can keep using .hasOwnProperty).&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt;  String indexers are unified with property lookup in 0.9, so that foo.bar and foo&lt;a href="https://typescript.codeplex.com/wikipage?title=%22bar%22&amp;referringTitle=Known%20breaking%20changes%20between%200.8%20and%200.9"&gt;&amp;#34;bar&amp;#34;&lt;/a&gt; behave the same.&lt;br /&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>jonturner</author><pubDate>Mon, 22 Apr 2013 16:14:24 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Known breaking changes between 0.8 and 0.9 20130422041424P</guid></item><item><title>Updated Wiki: Known breaking changes between 0.8 and 0.9</title><link>https://typescript.codeplex.com/wikipage?title=Known breaking changes between 0.8 and 0.9&amp;version=7</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Known breaking changes between 0.8 and 0.9&lt;/h1&gt;
The 0.9.x series introduces breaking changes to help the language mature, align with the ECMAScript 5 standard and ECMAScript 6 draft recommendations, and general alignment of the compiler with the spec itself.  While we try to limit the number of breaking changes, it’s important to make necessary changes now, before the language and tools reach 1.0.  &lt;br /&gt;&lt;br /&gt;Below is the list of currently known breaking changes.&lt;br /&gt;
&lt;h2&gt;Tightening of compiler to spec&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; There was functionality allowed by the 0.8.3 compiler that was not explicitly allowed by the spec (eg, exploiting patterns of access modifiers to simulate ‘protected’).  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We tightened the compiler to follow the spec more closely to avoid code that relies on a “loose” compiler implementation.  &lt;br /&gt;
&lt;h2&gt;The type ‘bool’ is now ‘boolean’&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The name of the Boolean type was initially ‘bool’.  During 0.9.0, ‘bool’ will be marked as deprecated, preferring instead the name ‘boolean’.  As of 0.9.1, ‘bool’ will no longer be accepted.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The official name for the Boolean type in ECMAScript is ‘boolean’.  The ‘bool’ type name is being changed to align with the standard.&lt;br /&gt; 
&lt;h2&gt;The ‘module’ keyword no longer creates a type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, a clearer distinction is made between roles of namespaces, types, and values.  Modules now contribute only to namespaces and values and will no longer contribute a type.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This simplification of the role of modules allow modules to now extend classes and functions more easily.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to ‘Array’ type&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, the type of Array is now generic.  &lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; The Array type was less specialized before.  Now, with the advent of generics, we can allow for a more precise typing of Array contents.&lt;br /&gt; 
&lt;h2&gt;Introduction of generic types – Change to syntax parsing&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In 0.9.0, with the introduction of generics, a difference in how syntax is parsed was introduced.  This may affect some forms of syntax that previously parsed as acceptable ES5.  Specifically, the following example will no longer be parsed as a comma-delimited expression of two comparisons, but instead as an invocation of a generic function with two arguments:&lt;br /&gt; &lt;br /&gt;&lt;pre&gt;
myfun&amp;lt;x,y&amp;gt;(z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To make this unambiguously an expression, use parentheses.  For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
(myfun &amp;lt; x), y &amp;gt; (z)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; We follow the precedence set by other languages with regards to syntax for generics.  Unfortunately, this does lead to ambiguities in a few cases.&lt;br /&gt; 
&lt;h2&gt;Overload declarations must immediately precede implementation&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series was more lax about what was allowed between overload declaration and its implementation&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Indexers must have full type annotation now&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
interface a1 {
    [n: number];  //&amp;lt;-- was allowed in 0.8.x, now an error
}
interface a1 {
    [n: number]: string;  //&amp;lt;-- correctly specifies return type, valid in 0.8.x and 0.9.x
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Tightening compiler to align with grammar&lt;br /&gt; 
&lt;h2&gt;Statics must be fully-qualified&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; Previous you could optionally not qualify a static member access when inside a static member definition&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Just as classes require “this.”, statics will require “&amp;lt;Class name&amp;gt;.” to denote where the symbol comes from&lt;br /&gt; 
&lt;h2&gt;No longer accept semicolon at the end of methods&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;
class Todo extends Backbone.Model {
 
    // Default attributes for the todo.
    defaults() {
        return {
            content: &amp;quot;empty todo...&amp;quot;,
            done: false
        }
    };
}
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This may be from following the syntax more strictly in the 0.9.0 fidelity parser.  We may soften this restriction in the future.&lt;br /&gt; 
&lt;h2&gt;No longer accept &amp;quot;new number[]&amp;quot;&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; In the 0.8.x series, we allowed some exceptions to the rule that an expression should follow &amp;#39;new&amp;#39;.  Here we allowed the type &amp;quot;number[]&amp;quot; to follow new.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; This was accidentally allowed in the 0.8.x compiler.  As part of the 0.9.x work, we&amp;#39;re tightening the compiler, and in doing so no longer allow this.&lt;br /&gt; 
&lt;h2&gt;&amp;#39;declare&amp;#39; now required for top level non-interface declarations in .d.ts files&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt; The 0.8.x series had a lot of lenience in the .d.ts file syntax.  We want to tighten the syntax.&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt; Loose syntax rules are confusing to users and lead to inconsistent .d.ts files.  &lt;br /&gt; 
&lt;h2&gt;String indexers constrain the types of members on the interface&lt;/h2&gt;&lt;b&gt;Description:&lt;/b&gt;  A string indexer with element type Foo is a constraint that all members of the interface will have types compatible with Foo.  The only exception is that members implicitly inherited from Object which can be called on any object type continue to have the type provided in Object unless explicitly override.  So this:&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        hasOwnProperty(eventName: string): bool;
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;Can be changed to this without changes to consumers of the interface (that is, they can keep using .hasOwnProperty).&lt;br /&gt;&lt;pre&gt;    export interface IEventListenerMap {
        [eventName: string]: IEventCallback[];
    }
&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Reason:&lt;/b&gt;  String indexers are unified with property lookup in 0.9, so that foo.bar and foo&lt;a href="https://typescript.codeplex.com/wikipage?title=%22bar%22&amp;referringTitle=Known%20breaking%20changes%20between%200.8%20and%200.9"&gt;&amp;#34;bar&amp;#34;&lt;/a&gt; behave the same.&lt;br /&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>jonturner</author><pubDate>Mon, 22 Apr 2013 15:05:52 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Known breaking changes between 0.8 and 0.9 20130422030552P</guid></item></channel></rss>