Реліз 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(["Привіт", "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


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.