Релиз typescript 1.7

от автора

Приветствую, коллеги! Вчера Microsoft напрягся и выкатил релиз следующей версии typescript, типизированной надстройки над javascript. В новой версии не только возведение в степень и раздельная конфигурация целей, но и первые наработки по async/await из стандарта ES7. Подробнее под катом.

async/await, но не для всех

Основная фича, долго обкатывавшаяся в бета версии — это поддержка ключевых слов async и await для работы с промисами на уровне языка. Этот синтаксис разрабатывается в рамках следующего стандарта ES7: одна из особенностей Typescript состоит в том, что он тащит языковые фичи не только из ES6, но и из ES7. К сожалению, текущая версия typescript может генерировать код async и await только для интерпретаторов js с поддержкой генераторов. Пока из таких node.js четвертой версии. Авторы обещают сделать поддержку для барузеров/ES5, но жалуются что такая реализация требует от кодогенератора создавать state machine, что сильно усложняет весь процесс компиляции.

"use strict"; // printDelayed is a 'Promise<void>' async function printDelayed(elements: string[]) {     for (const element of elements) {         await delay(200);         console.log(element);     } }   async function delay(milliseconds: number) {     return new Promise<void>(resolve => {         setTimeout(resolve, milliseconds);     }); }   printDelayed(["Hello", "beautiful", "asynchronous", "world"]).then(() => {     console.log();     console.log("Printed every element!"); }); 

Полиморфный this

Теперь для возвращаемого значения функции можно указать this. Это значит — «объект этого класса или любого класса, наследованного от него». Очень удобно для создания «fluent api», когда метод возвращает объект заранее неизвестного типа:

interface Model {     setupBase(): this; }   interface AdvancedModel extends Model {     setupAdvanced(): this; }   declare function createModel(): AdvancedModel; newModel = newModel.setupBase().setupAdvanced(); // fluent style works 

—module теперь поддерживает ES6

Начиная с этой версии можно более гибко конфигурировать в какой javascript компилировать и для какой системы работы с модулями. Например, можно собрать ES6 код, но с commonjs модулями, для ноды:

//tsconfig.json targeting node.js v4 and beyond {     "compilerOptions": {         "module": "commonjs",         "target": "es6"     } } 

ES7 возведение в степень

Небольшой синтаксический сахар из ES7, пришедший на замену Math.pow:

let squared = 2 ** 2;  // same as: 2 * 2 let cubed = 2 ** 3;  // same as: 2 * 2 * 2 let num = 2; num **= 2; // same as: num = num * num; 

Где брать?

Последняя версия typescript традиционно доступна на официальном сайте и в npm:

npm update typescript 

ссылка на оригинал статьи http://habrahabr.ru/post/272037/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *