Как вы знаете, вчера вечером состоялся релиз Visual Studio 2015. Одновременно Microsoft представила финальную версию TypeScript 1.5, включив его в состав новой Visual Studio. Также его можно скачать отдельно для предыдущих версий VS или же установить с помощью npm. Под катом — краткий список что интересного в новом релизе.
Microsoft хочет сделать TypeScript обратно совместимым с ES6, и в каждом новом релизе планомерно добавляет синтаксис нового стандарта. Версия 1.5 особо богата нововведениями: ES6-синтаксис для модулей, destructuring, оператор троеточия, итерация с помощью for...of, символы, computed properties, поддержка let/const и шаблонизация строк. Шаблонизация строк, Карл!
Кроме поддержки ES6 синтаксиса для модулей, добавлена компиляция в два новых формата загрузки модулей: SystemJS и UMD. Вместе с уже поддерживаемыми CommonJS и AMD это дает возможность выбрать для создаваемого кода один из четырех вариантов загрузки модулей.
Также команда разработчиков переименовала internal modules в «namespaces», так что «typescript module» и «typescript external module» теперь одно и то же. Говорят, новые разработчики жаловались и путались.
Позволяет задать список файлов для компиляции и настройки компилятора.
Стандарт ES7 стабилизируется еще не скоро, но в TypeScript уже можно использовать новый синтаксис декораторов, правда в экспериментальном режиме:
Частичная поддержка синтаксиса 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() { … }
}
shock_one
Еще появилась поддержка arrow functions без скобок, если тело функции содержит только одно выражение.
То, что раньше нужно было писать так:
теперь можно так:
ishmakov Автор
Спасибо, дописал.
shock_one
Мне кажется, это не стоит упоминания. Они стремятся быть суперсетом ES6, а это часть стандарта. Кстати, подробнее список изменений 1.5 можно посмотреть в roadmap, а все, что уже поддерживается в Kangax ES6.
ishmakov Автор
Не, интересная штука. Это именно то, что важно для разработчиков. Я, например, это пропустил, когда читал roadmap. А штука сильно повышает читаемость кода.
shock_one
Еще, если аргумент один, но у него указан тип, то таки, к сожалению, надо брать его в скобки.
a553
Это было с самого начала.
shock_one
Хм, возможно это у меня IntellijIDEA раньше не понимала такой синтаксис. Если да, прошу прощения, за то, что ввел в заблуждение.
a553
ReSharper тоже, к сожалению, много чего не понимает. Но разработчикам тулзов проще/дешевле/интереснее писать свои велосипеды, чем использовать стандартные сервисы компилятора. :(
ControlFlow
В 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 и релизных циклов компиляторов, что некоторые вещи можно сделать лучше чем они сделаны в компиляторах и так далее.
Я могу дальше продолжать, но пользователям все равно виднее, эх :)
a553
Можете не повторяться, ваши доводы я уже читал, их понял, но конечный продукт из-за этого лучше не стал.
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.