[Из песочницы] Интервью с разработчиками на TypeScript

TypeScript — это относительно новый язык программирования, который компилируется в JavaScript. Его основные преимущества — это классы и проверка типов на этапе компиляции. Компилятор TypeScript — с открытым исходным кодом, а разработка спонсируется Microsoft.Однако, и язык, и компилятор все ещё молоды и опыт его применения в реальных проектах мало у кого есть. Самому же очень редко выпадает шанс попробовать новое средство разработки на реальном проекте: слишком велики риски провала и большинство заказчиков не пойдет на это.

Тем приятнее встретить людей, которым довелось проверить его в «боевых» условиях. У меня получилось побеседовать с двумя ребятами, сделавшими редактор отчетов на TypeScript.

6c8e44adbf514c2fb97a55b821cc0057.JPG

Кто вы? Представьтесь.Михаил: Здравствуйте! Меня зовут Михаил. Я работаю в 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.

6c2ad98485974260879cf9ee0aff2aab.png

Почему не использовали другие решения: 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? Михаил: Пишите. Вам понравится.Сергей: Пробуйте, сравнивайте. В сети есть ответы практически на все вопросы.

© Habrahabr.ru