TypeScript — это относительно новый язык программирования, который компилируется в JavaScript. Его основные преимущества — это классы и проверка типов на этапе компиляции. Компилятор TypeScript — с открытым исходным кодом, а разработка спонсируется Microsoft.
Однако, и язык, и компилятор все ещё молоды и опыт его применения в реальных проектах мало у кого есть. Самому же очень редко выпадает шанс попробовать новое средство разработки на реальном проекте: слишком велики риски провала и большинство заказчиков не пойдет на это.
Тем приятнее встретить людей, которым довелось проверить его в “боевых” условиях. У меня получилось побеседовать с двумя ребятами, сделавшими редактор отчетов на TypeScript.
Кто вы? Представьтесь.
Михаил: Здравствуйте! Меня зовут Михаил. Я работаю в DX (тульском офисе Developer Express Inc. — прим. интервьювера) уже 14 лет. Начинал я с Delphi (VCL), потом был C# (ExpressAppFramework) и вот уже 3 года я активно пишу на JavaScript/TypeScript. Cначала в команде DevExtreme, где я был одним из тим-лидеров, а с прошлого года я занимаюсь разработкой Web Report Designer.
Сергей: Меня зовут Сергей. Я преподавал в Тульском госуниверситете, работал в ИТ-подразделениях крупных комнаний, сейчас уже почти 6 лет работаю в DX. Начинал с C/C++ (MS Visual Studio, C++ Builder), в DX работал над проектом ExpressAppFramework, потом в команде DevExtreme, а сейчас занимаюсь HTML дизайнером для XtraReports Suite.
Кто в вашей команде? Как они появились?
Михаил: В самом начале наша команда состояла из меня, еще одного разработчика из DevExtreme и разработчика из команды Reports. Надо сказать, что исторически DX сильна в основном своими VCL, .NET и ASP.NET компонентами. Но мы с оптимизмом смотрим в будущее и не хотим отстать от поезда современного программирования, которым сейчас, безусловно, является HTML5 и всё, что с ним связано. Но, опять таки, оговорюсь, в основном у нас работают C# программисты. Сейчас мы хотим немного изменить этот дисбаланс.
Сергей: Я и есть “еще один разработчик из DevExtreme” :) Занимался там дизайнером форм, интеграцией с Visual Studio и PhoneGap контейнерами для нашего фреймворка.
Как решили использовать TypeScript?
Михаил: Про TypeScript я услышал на конференции РИТ++ 2012. Тогда это была одна из первых версий. Прямо скажем, это было сыровато и не было многих вещей, которые появились в следующих версиях. Но тем не менее, я пробовал его в небольших сэндбокс проектах и то, что получалось, мне нравилось.
Сергей: Фреймворк DevExtreme написан на JavaScript и шаблоны проектов для MS Visual Studio сначала также были только JavaScript-овые. Но в 2013 году некоторые наши пользователи стали просить сделать файлы определений .d.ts для нашего фреймворка и TypeScript-овые шаблоны проектов. Мы поддержали TypeScript и получили строгую типизацию и интеллисенс, что здорово помогло нашим клиентам при “вхождении” во фреймворк. Нам понравилось, как выглядел код в клиентских проектах. После этого нам самим захотелось использовать TypeScript.
Почему не использовали другие решения: CoffeeScript, например?
Михаил: Основными причинами по которым мы выбрали TypeScript были:
- Близкий к C# синтаксис.
- Хорошая интеграция с Visual Studio. Это скорее сугубо наше преимущество, так как я отмечал выше, все мы C# программисты, а это автоматически означает, что руки у нас заточены под «вижуалку».
- Многие вещи, присутствующие в языке, в скором времени войдут или уже вошли в EcmaScript6. JS-код после компиляции получается очень похожим на то, что было в TypeScript коде (Небольшой обзор нововведений: https://github.com/lukehoban/es6features — прим. интвервьювера).
- Достаточно гибкая система типизации и полная совместимость с JavaScript. Иными словами, можно выбирать, какая часть системы будет типизированной, а какая нет — и это позволяет делать очень гибкие решения, не доступные в том же C#.
- Microsoft stack.
Касаемо CoffeeScript. По тому, что я видел, это неплохая альтернатива TypeScript. Но сейчас у CoffeeScript я не вижу значительных преимуществ по сравнению с ним. И если базу кода TypeScript можно будет легко конвертнуть в EcmaScript 6, то сделать то же с CoffeScript проектом, я считаю, будет сделать намного сложнее.
Сергей: Я сначала скептически относился ко всем оберткам вокруг JavaScript. Для меня TypeScript показался более легким при вхождении. Возможно за счет близости синтаксиса к C#, возможности использования фрагментов кода JavaScript в TypeScript коде, близости результата трансляции к исходному тексту программы, что позволяет отлаживаться даже без map-файлов, если ваш код используется в каком-то другом месте. И, конечно же, типизация, интеллисенс и быстрые переходы по коду помогают в работе с большим проектом.
Правильно-ли я понял, что вы рассматриваете возможность отказаться от TypeScript с выходом и повсеместной реализацией стандарта EcmaScript6?
Сергей: Думаю, что существующие проекты переписывать смысла нет, а вот новый проект начать сразу на JavaScript EcmaScript6, если Visual Studio даст интеллисенс и проверку типов в редакторе — почему бы и нет. Я уже привык к этим плюшкам и отказываться не хочу.
Какая польза для вас, что TypeScript интегрирован в стек средств разработки Microsoft?
Михаил: Наши клиенты — это в основном разработчики, “сидящие” на Microsoft стеке. И если они и будут что-то использовать, то это вещь, которую рекомендует и продвигает Microsoft а ей без условно является TypeScript и нам надо было попробовать его, чтобы лучше понимать наших клиентов.
Сергей: Легко начать использовать TypeScript — он ставится даже на Visual Studio Express Edition. Ты просто добавляешь TypeScript файл в проект, и пишешь — больше ничего настраивать не надо. Ради интереса прикрутил TypeScript к Sublime — можно и так работать.
Какие трудности пришлось преодолеть?
Михаил: На самом деле, больших сложностей именно с TypeScript мы не испытывали. Возможно, только по началу, пока разрабатывали структуру проекта (что, где и как должно лежать). Но это из-за принципа: все когда-то происходит впервые.
Сергей: Пару недель привыкал к синтаксису TypeScript: руки набирали либо JavaScript, либо C# код.
Как отлаживаете и профилируете приложение?
Михаил: В деле отладки мы использовали композитный подход. А именно верстку — в основном, смотрели в Chrome, так как удобно. Там же и отлаживались. Благодаря map файлам всё происходит очень органично и не замечаешь того, что работаешь с TypeScript, а не JavaScript. Единственное, что иногда есть проблемы с обновлением исходников. Приходится чаще сохранять, чтобы код перегенерился. К чести Microsoft можно отнести очень быстрый компилятор начиная с версии 0.9.
Сергей: Приложение отлаживаем в Chrome, тесты, как мне кажется, удобнее отлаживать в IE + VisualStudio: можно вернулься на любую строчку назад или перескочить на пару строк вперед. Хотя в хроме тоже можно скоп перезапустить. При отладке в Chrome иногда map-файлы не поднимаются (иногда как раз в тот момент когда они больше всего нужны), но за счет читаемости результирующего JavaScript кода особых проблем это не создает.
Как тестируете код? Пишете тесты?
Михаил: У нас в компании TDD является обязательной методологией разработки кода. Поэтому все писалось по Test First-методологии, и надо отдать должное Knockout — очень помогает в этом вопросе. Т.е. сначала пишется верстка потом получаются биндинги которые определяют интерфейс вью модели. Далее мы пишем тесты на эту вью модель. Как-то так если вкратце. В качестве фреймворка для юнит-тестирования… Тут никаких сюрпризов: мы использовали QUnit. Continuous Integration у нас (куда ж без велосипедов) в DX свой, но с ним тоже не было проблем.
Сергей: QUnit + “qunit.TypeScript.DefinitelyTyped”
Используете какие-то расширения для Visual Studio?
Михаил: Мы использовали Web Essentials, который, как мне кажется, стандарт де-факто для тех, кто пишет что-то под HTML5, JavaScript.
Используете фреймворки? Как они интегрируются с TypeScript?
Михаил: Но куда же без jQuery :) Да, конечно, мы использовали ряд сторонних библиотек TS, описания которых без проблем можно найти в Nuget Packages Manager по ключевику TypeScript.DefinitelyTyped.
Сергей: Knockout.js, Globalize, WebApp.js. Определения для соронних библиотек, которых нет в галерее Visual Studio, как правило, можно найти на GitHub. Например, определения распространенных контролов (типа select2 и ему подобных) там уже есть. Если уж и там не нашел, то достаточно легко написать себе нужный d.ts файл или, если совсем лень, то прикастить к .
Как делали локализацию продукта?
Сергей: Использовали “Globalize.js”: добавили в проект nuget пакет “globalize.TypeScript.DefinitelyTyped” — и все.
Какие советы можете дать тем, кто решит написать проект на TypeScript?
Михаил: Пишите. Вам понравится.
Сергей: Пробуйте, сравнивайте. В сети есть ответы практически на все вопросы.
Автор: ivann
Возможна ли разработка серьезного проекта на Typescript без VisualStudio и вообще Windows.?
Если кто-то уже пытался/работает в таких условиях – какие основные трудности возникли?