add

advertisement
Microsoft Developer Tour
Технологическая экспедиция
msdevtour.ru
Microsoft Developer Tour
Технологическая экспедиция
#msdevtour
Разработка
на TypeScript
Константин Кичинский
Эксперт по стратегическим технологиям, Microsoft
Веб-разработка
CSS
HTML
Давным-давно, когда
мерцающие заголовки
были в порядке вещей
JS
Веб-разработка
HTML
JS
Суровое настоящее
с веб-стандартами и
фреймфорками.
CSS
JavaScript не был рассчитан
на большие проекты.
Веб-разработка
HTML
CSS
HTML
Давным-давно, когда
мерцающие заголовки
были в порядке вещей
JS
JS
Суровое настоящее
с веб-стандартами и
фреймфорками.
CSS
Как масштабировать
разработку больших
приложений на JavaScript?
Попытки изобрести велосипед
CoffeeScript
Dart
GWT
Script#
ClosureScript
Emscripten
и даже qb.js!
https://github.com/jashkenas/coffeescript/wiki/List-of-languagesthat-compile-to-JS
http://xkcd.com/927/
Подмена задачи != решение
Что такое TypeScript?
TypeScript – это язык для разработки приложений на JavaScript.
Что такое TypeScript?
TypeScript – это язык для разработки приложений на JavaScript.
1. Код на JS – это код на TS
2. TS расширяет JS (в согласии с ES6+)
3. Код на TS прозрачно компилируется в JS-код
И… TypeScript – это проект с
открытым исходным кодом.
*fork me on github*
http://typescriptlang.org
Как работает TypeScript?
1. TypeScript – добавляет в JS статическую типизацию
И другие плюшки, обычно называемые синтаксическим сахаром
2. TypeScript компилируется в JavaScript
Как правило, при сохранении файлов.
3. Итоговый код работает везде, где работает JavaScript
Любой браузер, любая операционная система, любой сервер. И даже в IoT!
DEMO
TypeScript 101
Microsoft Developer Tour #MSDevTour
Как перейти на TypeScript?
Начните с JavaScript
Используйте свой существующий код и код библиотек.
Подключите .d.ts-файлы для популярных библиотек.
Опционально: типы, классы, модули
Начните прописывать типы для всех объектов
Определите классы, интерфейсы, разбейте на модули
Рефакторинг кода с учетом возможностей TS и ES6+
Сделайте код более элегантным, переложив часть задач на компилятор и возможности целевого
языка.
Инструменты
Visual Studio
Sublime Text
Eclipse
WebStorm
Emacs
VI
…
Библиотеки
DefinitellyTyped (200+ typings)
DOM
jQuery
WinRT
WinJS
…
Приложения
Windows (UAP)
Cordova
node.js
…
Кстати, команда AngularJS
переходит на TypeScript.
Сообщество
Как используется TypeScript?
Компилятор TypeScript
Открытый
Написан на TypeScript
Скомпилирован в JS
Интегрируется в инструменты
Работает из командной строки
DEMO
Компилятор TypeScript в браузере
Microsoft Developer Tour #MSDevTour
Почему это все так важно?
История Wix
WixStore
Новый командный проект
Тяжело работать, не влезая в чужой код
Переход к TypeScript
1. Один небольшой проект внутри большой системы
2. Успешное внедрение  перевод остальных проектов
http://blogs.msdn.com/b/typescript/archive/2015/03/17/guest-post-gil-amran-talksabout-using-typescript-at-wix.aspx
CoffeeScript и Dart – это языки, компилирующиеся в
JavaScript. К сожалению, сгенерированный код совсем не
похож на оригинальный код. Порой его тяжело
понимать, читать и отлаживать.
С другой стороны, TypeScript – это надмножество
JavaScript. TypeScript создает JavaScript-код, который
легко читать и отлаживать и почти такой же, как
оригинальный код на TS.
Gil Amran
Когда ты создаешь небольшое или среднее JS-приложение в одиночку
или вдвоем, это нормально обходиться без безопасности типов.
Но когда приложение растет, этот рост может привести к каше в
коде, которую очень трудно поддерживать и отлаживать.
Воспользоваться преимуществами типов значит,
что вы словите ошибки во время компиляции вместо
выполнения (чего может и не быть)… и я имею в виде
не просто строки или числа, а интерфейсы со
строгими определениями.
Gil Amran
Самая очевидная разница между кодом на TypeScript и
сгенерированным кодом в том, что типы исчезают –
они используются только на этапе компиляции.
Вы можете рассматривать это как еще один тест,
работающий во время сборки, чтобы проверить, что
все функции вызываются правильно.
Мы в шутку зовем его WarningScript. :-)
Gil Amran
История Babylon.js
OpenSource-библиотека для работы с WebGL
В среднем 1 версия в месяц
25 участников проекта
30+ релизов
500+ коммитов
14000+ строчек кода
120+ файлов кода
250+ форков
http://babylonjs.com
История Babylon.js
OpenSource-библиотека для работы с WebGL
Сложный проект, рассчитанный на внешнюю аудиторию
1. Сделать прозрачно для JavaScript-разработчиков
2. Сделать понятно для разработчиков на C#, Java и т.п.
Повысить надежность кода, но сохранить возможность вносить правки на чистом
JavaScript.
http://blogs.msdn.com/b/eternalcoding/archive/2014/04/28/why-we-decided-tomove-from-plain-javascript-to-typescript-for-babylon-js.aspx
[для командного проекта на JS] интеграция пуллзапросов – сложная задача, потому что вы должны
гарантировать, что код, который вы не создавали и не
контролируете, ничего не нарушит. С TypeScript это
становится проще благодаря статичной компиляции.
David Catuhe
История NativeScript (Telerik)
OpenSource – фреймворк для кросс-платформенных приложений
Ядро фреймворка и CLI написаны на TypeScript
Необходимо надежное описание для компиляции в нативный код
Веб слишком быстро меняется, никто не хочет учить то, что завтра исчезнет.
Дать подсказки по API разработчикам
http://developer.telerik.com/featured/the-rise-of-typescript/
Так как TypeScript – это надмножество JavaScript, то вы
можете просто переименовать ваши существующие .jsфайлы в .ts-файлы, обычно, они сразу работают.
Веб-разработчикам знакома такая практика: CSSпрепроцессоры, используемые сегодня многими из нас
(к примеру, SASS и LESS), работают точно также.
TJ VanToll
TypeScript последовательно следует приверженности
свежим возможностям ECMAScript, что дает
дополнительную уверенность JavaScript-разработчикам,
беспокоящихся об использовании языка, который
может увести их от стандарта.
TJ VanToll
Дополнение кода особенно полезно в незнакомых вам
библиотеках. В NativeScript, к примеру, мы
предоставляем доступ ко всем API iOS и Android через
JavaScript.
Это круто, но проблема в том, что я не разработчик под
Android или iOS, поэтому я понятия не имею, какие API
существуют. NativeScript использует файлы декларации
TypeScript, использование которых сильно облегчает
мою жизнь.
TJ VanToll
И еще один пример про
архитектуру…
Мне захотелось сделать доброе и светлое…
Декларация типов/интерфейсов для одной популярной
библиотеки.
Внутренний код на JavaScript, к которому нет доступа
Внешняя документация, сделанная через jsDocs
Интерфейсы для работы с событиями
IEventManager
{IEventManager} add(types, callback[, context[, priority]])
 callback: Функция-обработчик события. В качестве параметра в функцию передается объект,
описывающий событие. Может быть либо произвольным объектом, либо реализовывать
интерфейс IEvent.
{IEventManager} remove(types, callback[, context[, priority]])
 callback: Функция-обработчик события. В качестве параметра в функцию передается объект
события IEvent.
{IEventManager} fire(type[, event])
…
Интерфейсы для работы с событиями
IEventManager
export interface IEventManager extends IEventTrigger {
add(types: string | string[],
callback: (event: IEvent|Object) => void,
context?: Object,
priority?: number): IEventManager;
remove(types: string | string[], callback: (event: IEvent|Object) => void, context?:
Object, priority?: number): IEventManager;
fire(type: string, eventObject?: IEvent|Object):IEventManager;
…
}
Интерфейсы для работы с событиями
IEventManager
export interface IEventManager extends IEventTrigger {
add(types: string | string[],
callback: (event: IEvent|Object) => void,
context?: Object,
priority?: number): IEventManager;
remove(types: string | string[], callback: (event: IEvent|Object) => void, context?:
Object, priority?: number): IEventManager;
fire(type: string, eventObject?: IEvent|Object):IEventManager;
…
}
Интерфейсы для работы с событиями
IEventManager
add(types, callback[, context[, priority]])
remove(types, callback[, context[, priority]])
fire(type[, event])
…
IEventEmitter
IEventManager events
IPopup extends IEventEmitter, …
События: close, open
Интерфейсы для работы с событиями
IEventManager
add(types, callback[, context[, priority]])
remove(types, callback[, context[, priority]])
fire(type[, event])
…
IEventEmitter
IEventManager events
IPopup extends IEventEmitter, …
События: close, open
Специализация сигнатур
interface Document {
createElement(tagName: "div"): HTMLDivElement;
createElement(tagName: "span"): HTMLSpanElement;
createElement(tagName: "canvas"): HTMLCanvasElement;
createElement(tagName: string): HTMLElement;
}
Специализация сигнатур
export interface IPopupEventManager extends IEventManager {
add(types: “open”, callback: (event: IEvent|Object) => void, context?: Object,
priority?: number): IPopupEventManager ;
add(types: “close”, callback: (event: IEvent|Object) => void, context?: Object,
priority?: number): IPopupEventManager ;
add(types: string, callback: (event: IEvent|Object) => void, context?: Object,
priority?: number): IPopupEventManager ;
add(types: string[], callback: (event: IEvent|Object) => void, context?: Object,
priority?: number): IPopupEventManager ;
…
}
Обновление наследования…
export interface IEventEmitter {
events: IEventManager;
}
IPopup extends IEventEmitter { … }

export interface IPopupEventEmitter {
events: IPopupEventManager;
}
IPopup extends IPopupEventEmitter { … }
Обобщенные типы
export interface IEventEmitter {
events: IEventManager;
}
IPopup extends IEventEmitter { … }

export interface IEventEmitter<T> {
events: T;
}
IPopup extends IEventEmitter<IPopupEventManager> { … }
Типизация толкает вас
переосмыслить
предсказуемость вашего
кода.
Roadmap
PREVIEW!
TypeScript
Легко начать
Куча инструментов
Более безопасный и надежный код
http://typescriptlang.org
https://github.com/Microsoft/TypeScript
Разработка на TypeScript
Константин Кичинский
Эксперт по стратегическим технологиям, Microsoft
@kichinsky, konkich@microsoft.com
©2015 Microsoft Corporation. All rights reserved. Microsoft, Windows, Office, Azure, System Center, Dynamics and other product names are or may be registered trademarks and/or
trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this
presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee
the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN
THIS PRESENTATION.
Download