Вышел TypeScript 1.6

TypeScript logoВыпущена новая версия языка TypeScript под номером 1.6.3. Давайте посмотрим какие новые возможности могут теперь использовать разработчики.

Что нового?

Поддержка React/JSX

TypeScript теперь поддерживает синтаксис JSX. Файлы с таким кодом должны иметь расширение ".tsx".

Классы в виде выражений

При необходимости теперь можно создать анонимный класс c помощью выражения. Например:

class StateHandler extends class { reset() { return true; } } {
   constructor() {
     super();
   }
}

...

var handler = new StateHandler();
handler.reset();

Пользовательский контроль типов

Раньше для проверки типов в run-time использовались typeof и instanceof. Однако они работают только для типов которые понятны JavaScript. С выходом версии 1.6 для интерфейсов и реализации своей логики проверки можно создавать собственные функции. Их синтаксис следующий:

function isMyClass(source: any): source is MyClass {
    // функция должна вернуть 
    // true если тип source равен MyClass,
    // false в противном случае

    return typeCheckResult;
}

...

if (isMyClass(someVar)) {
    // компилятор "знает" что в этом блоке 
    // someVar является экземпляром MyClass
}

Комбинация типов

Еще одна новая возможность – определять комбинированные типы при помощи оператора пересечения &. Результатом будет тип, который содержит все поля и методы исходных типов. Синтаксис:

// Объявляем переменную
let someVar = <Type1 & Type1> {};

// Объявляем функцию, возвращающую комбинацию типов
function someFunction() : Type1 & Type2 
{
    ...
}

Например, вот код метода, который возвращает комбинацию из двух произвольных классов:

// функция возвращает комбинацию двух типов
function extend<T, U>(first: T, second: U): T & U {
   
    // тип переменной result является комбинацией двух типов
    let result = <T & U> {};
    
    // копируем все поля из первой переменной
    for (let id in first)
        result[id] = first[id];
  
    // и добавляем из второй только те, которые еще не существуют
    for (let id in second) {
        if (!result.hasOwnProperty(id))
            result[id] = second[id];
    }

    return result;
}

var x = extend({ a: "message" }, { b: 42 });
alert(x.a); // вызов корректный
alert(x.b); // вызов корректный

Абстрактные классы

В TypeScript наконец-то появились абстрактные классы:

abstract class A {
    foo(): number { return this.bar(); }
    abstract bar(): number;
}

var a = new A();  // ошибка

class B extends A {
    bar() { return 42; }
}

var b = new B();  // корректный вызов

Псевдонимы (alias) для универсальных типов (generic types)

В прошлых версиях TypeScript псевдонимы могли быть использованы только для обычных типов. Теперь они могут применяться и для универсальных типов:

// someFx - псевдоним для типа который представляет собой 
// функцию с 2 универсальными параметрами
type someFx<T, U> = (u: U, t:T) => T;

var fx: someFx<number, string>;
fx = (x,y) => { return parseInt(x) + y; }

alert(fx("2", 42));

Где скачать?

TypeScript 1.6 доступен в следующих вариантах:

Обратная связь

Разработчики TypeScript ждут комментарии, советы и сообщения о найденных ошибках на сайте проекта.

Добавить комментарий