[Перевод] TypeScript и путь к версии 2.0
var t: [number, string] = [1, «hello»]; t = []; // Error t = [1]; // Error t = [2, «test»]; // Ok t = [«test», 2]; // Error t = [2, «test», true]; // Ok Когда мы выпустили TypeScript 1.0 ранее в этом году, мы были сфокусированы на том, чтобы создать язык, который поможет разработчикам действительно масштабировать из проекты на JavaScript. Было довольно увлекательно наблюдать, что люди делали с ним, включая 170000 строчек кода в Mozilla Shumway, Walmart stationery и наш богатый опыт с Microsoft Azure, в котором мы перепрыгнули за миллион строчек кода.Наша цель в работе над TypeScript — продолжать поддерживать проекты подобного размаха и сделать его лучшим языком для масштабирования JavaScript. С версией 1.1 мы выпустили быстрый и легковесный компилятор, способный выдавать результат в четыре раза быстрее, чем предыдущий. Новый компилятор также более гибок в отношении добавления новой функциональности, чем мы непременно воспользуемся, двигаясь к версии 2.0.
Сегодня мы хотим рассказать о наших планах к второй версии. Мы приглашаем вас присоединиться к нашей странице TypeScript на GitHub и помочь нам сделать TypeScript еще лучше.
Рост сообщества типизации JavaScript Сообщество типизации JavaScript продолжает расти, мы рады наблюдать это и быть его частью. DefinitelyTyped сегодня содержит более 700 .d.ts типизированных описаний для широкого набора библиотек и фреймворков и приближается к тому, чтобы преодолеть планку в 600 контрибьюторов.Мы также видим новые проекты, вырастающие на базе работы, проделанной сообществом типизации JavaScript. Первый из таких, язык Flow от Facebook, анонсированный ранее в этом году. Он базируется на модулях, как фундаментальном строительном блоке для приложений и добавляет к ним богатый типизированный интерфейс и совместимость с .d.ts. Второй проект, называемый AtScript, был недавно анонсирован командой Angular в Google. Он базируется на аннотациях типов, похожих на TypeScript, и добавляет аннотации мета-данных и проверки при выполнении.
Команда TypeScript работает с обеими командами (Flow и AtScript) с тем, чтобы быть уверенными, что ресурсы, уже созданные сообществом типизации JavaScript, могут быть использованы и в этих инструментах. Все проекты могут очень многому научиться друг у друга, мы смотрим в будущее, чтобы работать вместе для создания наилучших инструментов для сообщества JavaScript. В долгосрочной перспективе, мы также стремимся к тому, чтобы наилучшие возможности этих инструментов вошли также в ECMAScript, стандарт, стоящий за JavaScript.
Дорожная карта TypeScript 1.3 Наш следующий релиз будет TypeScript 1.3, он будет включать новый переписанный языковой сервис, позволяющий сделать процесс разработки в редакторах кода более быстрым и гладким. Он также будет первым релизом, в котором мы начнем стандартизацию API компилятора, так что инструменты смогут на него полностью полагаться. Как часть этого релиза, мы также покажем превью новой версии интеграции в Visual Studio, которая впоследствии станет ее частью.С точки зрения языка, мы добавляем две новые возможности: protected и кортежей типов (tuple). Модификатор защищенного доступа довольно долго был одной из самых часто запрашиваемых возможностей, мы рады добавить в TypeScript дополнительные объектно-ориентированные шаблоны. С кортежами типов мы начинаем расширять систему типов, чтобы синхронизироваться с практиками, которые будут базироваться на возможностях грядущего ECMAScript 6. Если конкретнее, то это позволит безопасное с точки зрения типов использование деструктуризации массивов, рассматриваемых как кортежи.
Возможно, вы спрашиваете: «А где же TypeScript 1.2?» Мы рассчитывали использовать его как релиза для стабилизации предыдущей версии, но версия 1.1. оказалось достаточно стабильной, чтобы разработчики смогли на нее перейти. Это позволило нам перейти к завершению работ над языковым сервисом и добавлению новых возможностей раньше, чем мы изначально планировали.
TypeScript 1.4 В релизе 1.4 мы хотим сфокусироваться на дальнейшем развитии языка. Первые новые возможности уже доступны в мастер-верке на GitHub. Они включают объединения типов и использование typeof в if-блоках для уточнения типов. Обе возможности показаны в примере ниже: function createCustomer (name: { firstName: string; lastName: string } | string) { if (typeof name === «string») { // Because of the typeof check in the if, we know name has type string return { fullName: name }; } else { // Since it’s not a string, we know name has // type { firstName: string; lastName: string } return { fullName: name.firstName + » » + name.lastName }; } }
// Both customers have type { fullName: string } var customer = createCustomer («John Smith»); var customer2 = createCustomer ({ firstName: «Samuel», lastName: «Jones» }); Обе возможности вместе позволяют использовать более естественные шаблоны при работе с JavaScript-кодом. Объединения типов, позволяя более точно описывать типы с множественными вариантами, также помогают смягчить некоторые болевые точки ранних версий TypeScript, возникавшие при работе со смешанными массивами.От TypeScript 1.5 к TypeScript 2.0 Смотря в будущее на релиз 2.0, мы сфокусированы на двух целях в дополнение к основной цели предоставить наилучшие инструменты для JavaScript-разработки. Первая — это состыковать с ES6. Синхронизация с ES6 позволит TypeScript стать надмножеством следующей версии JavaScript, открывая возможность работать над новыми шаблонами и практиками создания кода, включая деструктурирование, строковые шаблоны, обещания, итераторы и др. в дополнение к тем возможностям, которые TypeScript уже поддерживает, например, классы и лямбда-функции. Второе — мы также работаем с командами Flow и Angular, чтобы убедиться, что TypeScript — это наилучший язык для работы с широким набором библиотек, включая декларативные фреймфорки вроде предстоящего релиза Angular 2.0.Заглядывая в будущее Впереди много работы, но мы уже хорошо продвигаемся по нашему плану. Вы можете попробовать некоторые из упомянутых выше возможностей, взяв свежую версию исходников в нашем репозитарии TypeScript на GitHub. Мы приняли для себя стиль GitHub для выкладывания спецификаций вместе с использование pull-запросов. Это позволит вам отслеживать новые возможности по мере их разработки, и мы также будем рады услышать ваши отзывы.Полезные ссылки