Protected

The new protected modifier in classes works like it does in familiar languages like C++, C#, and Java. A protected member of a class is visible only inside subclasses of the class in which it is declared:

  1. class Thing {
    protected doSomething() {
    /* ... */
    }
    }
    class MyThing extends Thing {
    public myMethod() {
    // OK, can access protected member from subclass
    this.doSomething();
    }
    }
    var t = new MyThing();
    t.doSomething(); // Error, cannot call protected member from outside class

Tuple types

Tuple types express an array where the type of certain elements is known, but need not be the same. For example, you may want to represent an array with a string at position 0 and a number at position 1:

  1. // Declare a tuple type
    var x: [string, number];
    // Initialize it
    x = ["hello", 10]; // OK
    // Initialize it incorrectly
    x = [10, "hello"]; // Error

When accessing an element with a known index, the correct type is retrieved:

  1. console.log(x[0].substr(1)); // OK
    console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

Note that in TypeScript 1.4, when accessing an element outside the set of known indices, a union type is used instead:

  1. x[3] = "world"; // OK
    console.log(x[5].toString()); // OK, 'string' and 'number' both have toString
    x[6] = true; // Error, boolean isn't number or string