2014-03-03

Typescript

Война войной, но жизнь продолжается. Так что перехожу к мирному и позитивному.

Обычно я пишу свои любительские Web-приложения так: есть простой статический HTML файл со статическими скриптами, которые динамически генерируют тот HTML, который показывается на странице, общаясь с сервером динамическими запросами, возвращающими JSON данные. Фактически весь сайт сидит в одном HTML файле index.html, который умеет генерировать весь сайт, беря параметры из '?' или '#' части URL. Особенно я люблю '#' часть, замена которой не приводит к перегрузке приложения, но добавляется в историю, что делает навигацию на таком динамическом сайте мгновенной. И, кстати, иногда позволяет запускать приложение offline, пользуясь локальным хранилищем html5.

К примеру http://tolkov.com/blog/ и http://tolkov.com/gallery/ сделаны именно так.

Я, правда, привык и люблю статическую типизацию. А люблю ее за удобство рефакторинга. Если поменять класс, его внутреннее устройство, достаточно перекомпилировать и по ошибкам сразу видно, где сломалось. В языке с динамической типизацией такого статического анализа нет и надо явно тестировать все, что и долго и иногда просто невозможно.

Поэтому я стал искать какое-нибудь решение и нашел два: язык Dart от Google и Typescript от Microsoft.

Dart - новый язык. Развитие идей Javascript, но не расширение языка. Он может либо интерпретироваться браузером напрямую, либо компилироваться в Javascript. Язык интересный, но мне не подходит, поскольку у меня уже есть длинный код на Javascript. Обратного перехода с Javascript на Dart нет, а переписывать все заново - не то решение, которое я искал.

Typescript - это расширение языка Javascript, включающее классы и типы. Он компилируется в чистый javascript, делая проверку типов, полей и методов. Мне понравилось, что просто переименовав свой код из .js в .ts я смог его скомпилировать в работающий Javascript, хотя при этом он выдал много ошибок компиляции о несоответствии типов. Я довольно легко пофиксил эти ошибки добавлением правильных типов. Затем я описал классы в новом синтаксисе. Приятно, что теперь несоответствие полей и методов вызывает сообщение об ошибке, хотя код все равно компилируется и работает. Typescript - в точности то, что надо для перехода от существующего Javscript кода. Оно позволяет делать такой переход постепенно.

Еще мне понравилось, что компилятор Typescript работает под Node.Js, а значит на любых платформах, а не только под Windows. Я запускаю его на своем Mac-е. Это выглядит как-то не по-микрософтовски, но написал его Anders Hejlsberg, известный как автор Turbo Pascal, архитект Delphi и C#. Под Windows он включен в последнюю Visual Studio и позволяет там иметь подсказки и подсветки.

Так что очень рекомендую. Хороший инструмент, нормально работает с JQuery. Сначала рекомендую немножко почитать документацию, она хорошо все объясняет.

Кстати, если вы собираетесь делать приложения под Tizen OS, это тоже выглядит правильным инструментом.

No comments: