Как вы знаете, вчера вечером состоялся релиз Visual Studio 2015. Одновременно Microsoft представила финальную версию TypeScript 1.5, включив его в состав новой Visual Studio. Также его можно скачать отдельно для предыдущих версий VS или же установить с помощью npm. Под катом — краткий список что интересного в новом релизе.



Частичная поддержка синтаксиса ES6



Microsoft хочет сделать TypeScript обратно совместимым с ES6, и в каждом новом релизе планомерно добавляет синтаксис нового стандарта. Версия 1.5 особо богата нововведениями: ES6-синтаксис для модулей, destructuring, оператор троеточия, итерация с помощью for...of, символы, computed properties, поддержка let/const и шаблонизация строк. Шаблонизация строк, Карл!

Улучшения системы модулей



Кроме поддержки ES6 синтаксиса для модулей, добавлена компиляция в два новых формата загрузки модулей: SystemJS и UMD. Вместе с уже поддерживаемыми CommonJS и AMD это дает возможность выбрать для создаваемого кода один из четырех вариантов загрузки модулей.

// math.ts

export function add(x, y) { return x + y }
export function subtract(x, y) { return x – y }
export default function multiply(x, y) { return x * y }

// myFile.ts

import {add, subtract} from "math";
import times from "math";
var result = times(add(2, 3), subtract(5, 3));


Также команда разработчиков переименовала internal modules в «namespaces», так что «typescript module» и «typescript external module» теперь одно и то же. Говорят, новые разработчики жаловались и путались.

Конфигурационный файл tsconfig.json



Позволяет задать список файлов для компиляции и настройки компилятора.

{
    "compilerOptions": {
        "module": "commonjs",
        "noImplicitAny": true,
        "removeComments": true,
        "preserveConstEnums": true,
        "out": "../../built/local/tsc.js",
        "sourceMap": true
    },
    "files": [
        "core.ts",
        "sys.ts",
        "types.ts",
        "scanner.ts"
    ]
}


ES7 Декораторы



Стандарт ES7 стабилизируется еще не скоро, но в TypeScript уже можно использовать новый синтаксис декораторов, правда в экспериментальном режиме:

import {Component, View, NgFor, bootstrap} from "angular2/angular2";
import {loadFile} from "audioFile";
import {displayAudioFile} from "displayAudio";

@Component({selector: 'file-list'})
@View({template: `
  <select id="fileSelect" size="5">
    <option *ng-for="#item of items; #i = index"
      [selected]="selected === item"(click)="updateSelection()">{{ item }}</option>
  </select>`,
  directives: [NgFor]
})

class MyDisplay {
  items: string[];
  constructor() {
    this.items = ["item1", "item2"];
  }

  updateSelection() { … }
}

Комментарии (13)


  1. shock_one
    21.07.2015 11:04

    Еще появилась поддержка arrow functions без скобок, если тело функции содержит только одно выражение.
    То, что раньше нужно было писать так:

    (singleParam) => { return expression; }
    


    теперь можно так:

    singleParam => expression
    


    1. ishmakov Автор
      21.07.2015 11:31

      Спасибо, дописал.


      1. shock_one
        21.07.2015 11:39
        +1

        Мне кажется, это не стоит упоминания. Они стремятся быть суперсетом ES6, а это часть стандарта. Кстати, подробнее список изменений 1.5 можно посмотреть в roadmap, а все, что уже поддерживается в Kangax ES6.


        1. ishmakov Автор
          21.07.2015 11:49

          Не, интересная штука. Это именно то, что важно для разработчиков. Я, например, это пропустил, когда читал roadmap. А штука сильно повышает читаемость кода.


      1. shock_one
        21.07.2015 11:52

        Еще, если аргумент один, но у него указан тип, то таки, к сожалению, надо брать его в скобки.


    1. a553
      21.07.2015 14:39
      +1

      Это было с самого начала.


      1. shock_one
        21.07.2015 14:43

        Хм, возможно это у меня IntellijIDEA раньше не понимала такой синтаксис. Если да, прошу прощения, за то, что ввел в заблуждение.


        1. a553
          21.07.2015 14:44

          ReSharper тоже, к сожалению, много чего не понимает. Но разработчикам тулзов проще/дешевле/интереснее писать свои велосипеды, чем использовать стандартные сервисы компилятора. :(


          1. ControlFlow
            22.07.2015 13:21
            +1

            В ReSharper мы поддерживали синтаксис `() => e` (и конечно `() => { }`) с самого начала поддержки TypeScript, потому что он был в 1.0. Даже недокументированный синтаксис `function() => e` хотели уже поддержать, но его дропнули до релиза.

            Разработчиком тулзов сложнее/дороже писать половину компилятора и справляться с расхождениями, но ни у кого не возникает почему-то мыслей, что компиляторы:

            1)… не всегда обладают необходимым для IDE функционалом (зачем компилятору хранить в AST вайтспейс и комментарии? зачем компилятору уметь API для модификаций AST и их трансляции обратно в текст? Зачем компилятору уметь быстро искать использования членов типов в других файлах? Зачем компилятору уметь переименовывать эти использования?).
            2)… написаны на каком-нибудь языке, на котором _НЕ НАПИСАН_ UI и ядро IDE. Это вообще никого не парит, я смотрю, будто от компилятора так мало информации надо и такой тривиальный протокол общения, что ничего не стоит сделать интероп. Ага ага
            3)… во время своего развития просто удаляют какие-то ставшими obsolete ошибками или предупредлениями, а вот от IDE хотят работу с разными версиями языка и нам приходится мейнтейнить все предыдущие версии языка
            4)… не всегда существует! Как писать поддержку JavaScript тогда, о какие «стандартные сервисы»?

            Никто почему-то не видит плюсов того, что все поддержки языков в IDE написаны на одном языке с использованием очень похожих концепций, что IDE не зависят от breaking changes в API и релизных циклов компиляторов, что некоторые вещи можно сделать лучше чем они сделаны в компиляторах и так далее.

            Я могу дальше продолжать, но пользователям все равно виднее, эх :)


            1. a553
              22.07.2015 15:04

              Можете не повторяться, ваши доводы я уже читал, их понял, но конечный продукт из-за этого лучше не стал.

              1. Roslyn это не спасло от вашего игнорирования.
              2. Сервисы компилятора написаны на TS и как-то интегрируются со студией. А помните SCSS дополнение, подсвечивающее код с помощью Ruby компилятора?
              3. Снепшоты — не самый плохой вариант.

              А пользователям действительно виднее. Потому что сейчас поддержка TS (да даже JS) очень посредственная. Я уж не говорю про производительность, редактировать JS/CSS/XML/HTML/AS*X/TS на ноутбуке с включенным решарпером просто невозможно. На режим no implicit any, я так понял, вы окончательно забили и реализовывать не собираетесь. Вайтспейсы в AST вам не помогают не сжирать строки при любом рефакторинге типа introduce variable, extract method и др.

              Вчера я переключил проект в TS 1.5 и посмотрел что получилось. Решарпер поставил новый рекорд плотности ложных ошибок! Ранее было примерно 1 ошибка на 500 строк (это если не использовать protected, который решарпер тоже не понимает — но спасибо за обещанный фикс в 9.2). Теперь у меня 17 ошибок на 212 строк! Потратил час времени, сделал вам 445645.


  1. NeoCode
    21.07.2015 13:43

    Как вы знаете, вчера вечером состоялся релиз Visual Studio 2015

    А я даже и не знал:) На хабре еще вроде нет обзора фич новой Студии?


    1. ishmakov Автор
      21.07.2015 14:13

      Я подозреваю, что XaocCPS уже пишет :). Даже не буду пытаться его опередить.


  1. potan
    21.07.2015 16:04

    Descruction сделали, ждем pattern matching.