TypeScript Cover photo

Представяне на Typescript 3.6 Beta. Какво ново?

На 19 юли беше представена бета версията на Typescript 3.6, като се очаква финалната версия да излезе на 27 август.

Какво представлява Typescript?

Typescript е статично типизиран език, който е надмножество на JavaScript, което означава, че програми, писани на JavaScript, са валидни Typescript програми. Самият език се транспилира до JavaScript, който после се изпълнява от Node.js или от браузъра. TypeScript се разработва и поддържа от „Майкрософт“ и респективно се поддържа от VisualStudio. Огромното предимство на езика пред чистия JavaScript е типизациятa – изключително полезна при писане на големи приложения.

Какво ново в TypeScript 3.6?

  • Силно типизирани генератори и итератори

В новата версия на Typescript имаме по-стриктни проверки върху итератор и генератор функции. В по-старите версии на езика потребителите нямаше как да разберат дали дадена стойност е била върната от итератора, или след като той е приключил(не е ясно какво след като е приключил?) 

function* foo() {
    if (Math.random() < 0.5) yield 100;
    return "Finished!"
}

let iter = foo();
let curr = iter.next();
if (curr.done) {
    // Предищните версии на Typescript не знаеха дали тва е string или number.
    // Сега се знае че това е число 'string' защото 'done' е 'true'!
    curr.value
}

Също така, преди генераторите предполагаха, че типът на yield е any.

function* bar() {
    let x: { hello(): void } = yield;
    x.hello();
}

let iter = bar();
iter.next();
// runtime error в предишните версии на езика
// грешка още по време на компилация в Typescript 3.6
iter.next(123);

Сега типът на yield вече може да се специфицира.

  • Подобряване на коректността на работа на Array Spread оператора

В EcmaScript 6 [...Array(5)] е еквивалентно на следния код [undefined, undefined, undefined, undefined, undefined], но TypeScript генерира следния код Array(5).slice(), което е малко по-различно Array(5) – създава масив с дължина 5, но без пропъртита и след като Typescript добави slice()масива, остава без пропъртита.

1 in [undefined, undefined, undefined] // true
1 in Array(3) // false

Това изглежда като езотерична разлика, но всъщност достатъчно много хора са имали проблем с
това. В новата вресия на езика този проблем е решен. Повече за това тук

  • Подобрени съобщения при неправилна употреба на промиси

Промисите (Promises) са това, което се използва, когато имаме работа с асинхронни данни в JavaScript и съответно в Typescript. Новата версия предоставя някои подобрения, когато имаме неправилна употреба на промиси.

Например доста често срещано е човек да забрави да използва await или .then() преди да подаде резултата от промис на друга функция.

interface User {
    name: string;
    age: number;
    location: string;
}

declare function getUserData(): Promise<User>;
declare function displayUser(user: User): void;

async function f() {
    displayUser(getUserData());
//              ~~~~~~~~~~~~~
// Argument of type 'Promise<User>' is not assignable to parameter of type 'User'.
//   ...
// Did you forget to use 'await'?
}

Също така

async function getCuteAnimals() {
    fetch("https://reddit.com/r/aww.json")
        .json()
    //   ~~~~
    // Property 'json' does not exist on type 'Promise<Response>'.
    //
    // Did you forget to use 'await'?
}

Тази нова функционалност ще позволи на едитора да ви подскаже да добавите await на промиса, преди да опитате да достъпите някакво негово пропърти или да го подадете на функция.

  • JSDoc коментарите вече няма да се сливат

В JavaScript файлове Typescript ще се консултира само с JSDoc коментари, намиращи се директно преди самия код, за да определи декларираните типове.

/**
 * @param {string} arg
 */
/**
 * oh, hi, were you trying to type something?
 */
function whoWritesFunctionsLikeThis(arg) {
    // 'arg' has type 'any'
}

За финал

Както споменахме, TypeScript 3.6 излиза в края на този месец. Ако вече имате наблюдения върху бетата, не се колебайте да ги споделите в коментар с нас. За повече информация и по-сериозни дискусии също можете да се присъедините към нашата фейсбук група – Технологичното общесто на България. До скоро и приятно кодене!

Коментирайте чрез Facebook

Мнения, критики, неточности - пишете ни, не ни жалете!

About Димо Димов