Typescript
Решаемая проблема:
Проблемы с разработкой сложных программ на JavaScript привели к необходимости облегчения разработки компонентов языка. Приложения становились больше, и начали давать о себе знать проблемы JavaScript, связанные с типами данных, с отсутствием единого способа наследования объектов, с моделью памяти JS, а также многое другое. Динамическая природа языка просто подталкивает к написанию универсальных функций, которые могут принимать десятки вариантов аргументов (как по типу данных, так и по их количеству).
Разработчики TypeScript искали решение, которое не будет нарушать совместимость со стандартом ECMAScript и его кросс-платформенной поддержкой. TypeScript был основан на поддержке программирования на базе классов, который предлагает стандарт ECMAScript.
TypeScript отличается от JavaScript возможностью явного статического назначения типов: позволяет статически анализировать язык, облегчая IDE поддержку и работу с кодом (соответственно их легче поддерживать, развивать, масштабировать и тестировать), поддержкой использования полноценных классов, а также поддержкой подключения модулей, что призвано повысить скорость разработки, облегчить читаемость, рефакторинг и повторное использования кода, помочь осуществлять поиск ошибок на этапе разработки и компиляции, повысить скорость выполнения программ.
Так что же привело к созданию TypeScript:
-
Многообразие версий JS поддерживаются не во всех браузерах, TS в свою очередь дает возможность используя различные «плюшки» быть компилируемым в различные версии: JS, ES6, ES5 и т.д.
-
Из этого как следствие JavaScript не модульный.
-
Иногда JavaScript ведёт себя неожиданно для разработчика, что определяется динамической типизацией.
Специфичность:
-
Является надмножеством JavaScript;
-
TS - это всего лишь инструмент, который призван облегчить разработку приложений.
-
Позволяет масштабировать разработку сложныхJavaScript приложений. (Добавляет возможность объявлять модули, классы и интерфейсы.)
-
Согласованность изменений (ошибки при компиляции если были конфликты в мерже).
-
Компиляция TypeScript происходит при сборке проекта.
В чем преимущество перед существующими решениями:
-
Строго статически типизированный (все типы проверяются при компиляции). Избавляет нас от динамической типизации JS, которая вызывает множество регрессионных ошибок. Поведение кода становится более очевидным.
-
Реализует концепции свойственные ООП (наследование, полиморфизм, инкапсуляция, модификаторы доступа, и т.д.)
-
Open-source проект (https://github.com/Microsoft/TypeScript)
-
Кроссплаформенный (Windows, MasOS, Linux)
**Похожие инструменты: **JavaScript
Как работает (специфичность):
-
Код на TS компилируется в JavaScript
-
Генерируемый код поддерживается большинством браузеров (ориентируется на стандарт ECMAScript 3, также поддерживает ECMAScript 5 и ECMAScript 6. В процессе разработки можно самим задать целевой стандарт ECMAScript.)
Что нужно для установки:
Предпочтительные инструменты: VisualStudioCode // VisualStudio 2015 / 2017
Компилятор TS можно установить с помощью команды менеджера пакетовnpm, который используется в Node.js:
> npm install -g typescript
Quick start: Depending on the technology what we will use together with TS
TypeScript itself is simple to add to any project with npm.
> npm install -D typescript
Плюсы
-
Описание каждого элемента приложения - сводит к минимуму вероятность неверной реализации / некорректного вызова методов; Заставляет продумать логику до самой реализации; Не дает возможность изменить один кусок приложения, сломав другой;
-
Описание области видимости свойств класса - ограничивает разработчика от совершения ошибок;
-
Жесткая архитектура дает возможность писать меньше тестов — все параметры методов жестко описаны (если код скомпилировался, тогда, почти каждый вызов будет является валидным);
-
Возможность настроить проект так, что любой не компилируемый код нельзя будет закоммитить;
Минусы
-
Для использования внешних инструментов (библиотек / фреймворков), сигнатуру каждого из методов каждого модуля этого инструмента необходимо описать, чтобы компилятор не выбрасывал ошибки.
-
Небольшая поддержка в виду малого количества специалистов на рынке.
-
На разработку тратится больше времени, в сравнении с JavaScript. Вызвано тем, что помимо реализации класса необходимо описать все задействованные интерфейсы, сигнатуры методов.
Какие возможности открывает язык:
-
Система для работы с модулями / классами — можно создать интерфейсы, модули, классы;
-
Можно наследовать интерфейсы (в том числе множественное наследование), классы;
-
Можно описывать собственные типы данных;
-
Можно создавать универсальные-интерфейсы (generic interfaces);
-
Можно описать тип переменной (или свойств объекта), или описать каким интерфейсом должен обладать объект на который ссылается переменная;
-
Можно описать сигнатуру метода.
Что нового привносит TypeScript:
— Статическая типизация и выведение типов;
— Необязательные аргументы для функций и значения по умолчанию;
— public, private, protect для свойств и методов классов;
— Геттеры и сеттеры для свойств «без головной боли»;
— Декораторы для всего;
— Интерфейсы и абстрактные классы;
— Generics;
— Компилирование в ES5 или даже в ES3 (с оговорками).
**И в том числе плюшки ES6: **
— Arrow Functions;
— Классы с единым стилем наследования;
— async/await из ES7;
— Итераторы и Генераторы;
— Многострочные строки с шаблонизацией и тоже «без головной боли» с плюсами и кавычками;
— Управление зависимостями, в том числе и их динамическая загрузка.