Выпущена новая версия языка 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 ждут комментарии, советы и сообщения о найденных ошибках на сайте проекта.