stringtranslate.com

Машинопись

TypeScript — это бесплатный язык программирования высокого уровня с открытым исходным кодом , разработанный Microsoft , который добавляет в JavaScript статическую типизацию с необязательными аннотациями типов . Он предназначен для разработки больших приложений и транслируется в JavaScript. [6] Поскольку TypeScript является надмножеством JavaScript, все программы JavaScript являются синтаксически допустимыми TypeScript, но они могут не выполнять проверку типов по соображениям безопасности .

TypeScript можно использовать для разработки приложений JavaScript для выполнения как на стороне клиента , так и на стороне сервера (как в случае с Node.js , Deno или Bun ). Для транспиляции доступно несколько вариантов. Можно использовать компилятор TypeScript по умолчанию [7] или вызвать компилятор Babel для преобразования TypeScript в JavaScript.

TypeScript поддерживает файлы определений, которые могут содержать информацию о типах существующих библиотек JavaScript , подобно тому, как файлы заголовков C++ могут описывать структуру существующих объектных файлов . Это позволяет другим программам использовать значения, определенные в файлах, как если бы они были статически типизированными объектами TypeScript. Существуют сторонние заголовочные файлы для популярных библиотек, таких как jQuery , MongoDB и D3.js. Также доступны заголовки TypeScript для модулей библиотеки Node.js , что позволяет разрабатывать программы Node.js внутри TypeScript. [8]

Компилятор TypeScript сам написан на TypeScript и скомпилирован в JavaScript. Он распространяется по лицензии Apache License 2.0 . Андерс Хейлсберг , ведущий архитектор C# и создатель Delphi и Turbo Pascal , работал над разработкой TypeScript. [9] [10] [11] [12]

История

TypeScript был выпущен для широкой публики в октябре 2012 года в версии 0.8 после двух лет внутренней разработки в Microsoft. [13] [14] Вскоре после первого публичного выпуска Мигель де Икаса похвалил сам язык, но раскритиковал отсутствие зрелой поддержки IDE, за исключением Microsoft Visual Studio , которая в то время не была доступна в Linux и OS X. [15] [16] По состоянию на апрель 2021 года имеется поддержка в других IDE и текстовых редакторах, включая Emacs , Vim , WebStorm , Atom [17] и собственный Visual Studio Code от Microsoft . [18] В TypeScript 0.9, выпущенном в 2013 году, добавлена ​​поддержка дженериков . [19]

TypeScript 1.0 был выпущен на конференции разработчиков Microsoft Build в 2014 году . [20] Обновление 2 для Visual Studio 2013 обеспечивает встроенную поддержку TypeScript. [21] Дальнейшие улучшения были внесены в июле 2014 года, когда команда разработчиков анонсировала новый компилятор TypeScript, производительность которого, как утверждается, увеличилась в пять раз. Одновременно с этим исходный код, который изначально размещался на CodePlex , был перенесен на GitHub . [22]

22 сентября 2016 года был выпущен TypeScript 2.0, в котором появилось несколько функций, в том числе возможность для программистов дополнительно обеспечивать нулевую безопасность , [23] чтобы смягчить то, что иногда называют ошибкой на миллиард долларов .

TypeScript 3.0 был выпущен 30 июля 2018 года [24] и содержит множество языковых дополнений, таких как кортежи в остаточных параметрах и выражениях распространения, остальные параметры с типами кортежей, общие остаточные параметры и т. д. [25]

TypeScript 4.0 был выпущен 20 августа 2020 года. [26] Хотя версия 4.0 не внесла каких-либо критических изменений, в нее были добавлены такие языковые функции, как пользовательские фабрики JSX и типы кортежей с переменным числом вариантов. [26]

TypeScript 5.0 был выпущен 16 марта 2023 года и включал поддержку декораторов. [27]

Дизайн

TypeScript возник из-за недостатков JavaScript для разработки крупномасштабных приложений как в Microsoft, так и среди их внешних клиентов. [28] Проблемы, связанные с работой со сложным кодом JavaScript, привели к появлению спроса на специальные инструменты, упрощающие разработку компонентов на языке. [29]

Разработчики TypeScript искали решение, которое не нарушило бы совместимость со стандартом и его кроссплатформенную поддержку. Зная, что текущее предложение стандарта ECMAScript обещает будущую поддержку программирования на основе классов , TypeScript был основан на этом предложении. Это привело к созданию компилятора JavaScript с набором синтаксических расширений языка, расширенного набора, основанного на предложении, который преобразует расширения в обычный JavaScript. В этом смысле функция класса TypeScript была предварительным просмотром того, чего ожидать от ECMAScript 2015. Уникальным аспектом, которого нет в предложении, но добавлен в TypeScript, является необязательная статическая типизация (также известная как постепенная типизация ), которая позволяет статическому анализу языка облегчить инструментарий и поддержку IDE.

Поддержка ECMAScript 2015.

TypeScript добавляет поддержку таких функций, как классы, модули и синтаксис стрелочных функций, как определено в стандарте ECMAScript 2015.

Функции

TypeScript — это расширение языка, которое добавляет функции в ECMAScript 6. Дополнительные функции включают в себя:

Следующие функции перенесены из ECMAScript 2015:

Синтаксически TypeScript очень похож на JScript .NET , еще одну реализацию Microsoft языкового стандарта ECMA-262, в которой добавлена ​​поддержка статической типизации и классических функций объектно-ориентированного языка, таких как классы, наследование, интерфейсы и пространства имен.

Совместимость с JavaScript

TypeScript — это строгий расширенный набор ECMAScript 2015, который сам по себе является расширенным набором ECMAScript 5, обычно называемого JavaScript. [32] Таким образом, программа JavaScript также является допустимой программой TypeScript, и программа TypeScript может беспрепятственно использовать JavaScript. По умолчанию компилятор ориентирован на ECMAScript 5, текущий преобладающий стандарт, но также может генерировать конструкции, используемые в ECMAScript 3 или 2015.

С помощью TypeScript можно использовать существующий код JavaScript, включать популярные библиотеки JavaScript и вызывать код, сгенерированный TypeScript, из другого JavaScript. [33] Объявления типов для этих библиотек предоставляются вместе с исходным кодом.

Введите аннотации

TypeScript обеспечивает статическую типизацию посредством аннотаций типов, что позволяет осуществлять проверку типов во время компиляции . Это необязательно, и его можно игнорировать, чтобы использовать обычную динамическую типизацию JavaScript.

функция add ( слева : число , справа : число ) : число { возврат влево + вправо ; }         

Примитивные типы аннотируются с помощью типов number, booleanи string. Эти типы отличаются от своих аналогов класса ( Number, Boolean, и т. д.), которые не могут выполнять операции непосредственно над значениями. Например, нельзя сложить a Numberи a . numberКроме того, существуют undefinedтипы nullдля соответствующих значений.

Все остальные типы аннотируются с использованием имени класса, а не примитивов, таких как Error. Некоторые типы принимают общие параметры , такие как Promise— обещание строки будет помечено как Promise<string>. Массивы можно записать двумя разными способами, которые синтаксически одинаковы: общий синтаксис Array<T>и сокращение с помощью T[]. Универсальные типы могут быть дополнительно объединены в цепочки, поэтому одну Promiseиз Arrayстрок можно записать как Promise<Array<string>>(или Promise<string[]>использовать сокращенный стиль массива).

Дополнительные встроенные типы данных : Tuple, Unionи never. anyМассив с предопределенными типами данных для каждого индекса — это файл Tuple. Переменная, которая может содержать более одного типа данных, является типом Union. Тип neverиспользуется, когда создание данного типа невозможно. Структуры со слабой или динамической типизацией могут использовать этот anyтип, чтобы избежать ошибок, хотя обычно это не рекомендуется. [34]

Аннотации типов можно экспортировать в отдельный файл объявлений , чтобы сделать информацию о типе доступной для сценариев TypeScript, использующих типы, уже скомпилированные в JavaScript. Аннотации можно объявить для существующей библиотеки JavaScript, как это было сделано для Node.js и jQuery .

Компилятор TypeScript использует вывод типа для вывода типов, когда типы не заданы. Например, addметод в приведенном выше коде будет рассматриваться как возвращающий, numberдаже если не была предоставлена ​​аннотация типа возвращаемого значения. Это основано на статических типах leftи rightbe numbers, а также на знаниях компилятора о том, что результатом добавления двух numbersвсегда является number. Однако явное объявление возвращаемого типа позволяет компилятору проверить правильность.

Если ни один тип не может быть выведен из-за отсутствия объявлений, по умолчанию используется динамический anyтип. Значение типа anyподдерживает те же операции, что и значение в JavaScript, и для операций над значениями выполняется минимальная проверка статического типа any. [35]

Файлы деклараций

При компиляции сценария TypeScript есть возможность создать файл объявления (с расширением .d.ts), который функционирует как интерфейс для компонентов скомпилированного JavaScript. При этом компилятор удаляет все тела функций и методов и сохраняет только сигнатуры экспортируемых типов. Полученный файл объявления затем можно использовать для описания экспортированных виртуальных типов TypeScript библиотеки или модуля JavaScript, когда сторонний разработчик использует его из TypeScript.

Концепция файлов объявлений аналогична концепции файлов заголовков в C/C++ .

объявить арифметику пространства имен { add ( слева : число , справа : число ) : число ; вычесть ( слева : число , справа : число ) : число ; умножить ( слева : число , справа : число ) : число ; разделить ( слева : число , справа : число ) : число ; }                       

Файлы объявлений типов можно написать вручную для существующих библиотек JavaScript, как это было сделано для jQuery и Node.js.

Большие коллекции файлов объявлений для популярных библиотек JavaScript размещены на GitHub в DefinitelyTyped.

Классы

TypeScript поддерживает классы ECMAScript 2015, которые интегрируют поддержку дополнительных аннотаций типов.

класс Person { частное имя : строка ; личный возраст : номер ; частная зарплата : число ;            конструктор ( имя : строка , возраст : число , зарплата : число ) { this . имя = имя ; этот . возраст = возраст ; этот . зарплата = зарплата ; }                 toString () : строка { return ` $ { this . имя } ( ${ this . age } ) ( ${ this . зарплата } )` ; // Начиная с версии 1.4 } }      

Дженерики

TypeScript поддерживает универсальное программирование . [36] Ниже приведен пример тождественной функции . [37]

идентификатор функции < Т > ( Икс : Т ) : Т { возврат х ; }      

Типы союзов

Типы объединения поддерживаются в TypeScript. [38] Значения неявно «помечены» типом языка и могут быть получены с помощью «typeof()».

преемник функции ( n : число | bigint ) : число | bigint { return ++ n }          

Перечислимые типы

TypeScript добавляет в JavaScript тип данных enum.

enum Cardsuit { Трефы , Бубны , Червы , Пики }; var c : Cardsuit = Cardsuit . Бриллианты ;         

По умолчанию члены перечисления нумеруются, начиная с 0; это можно переопределить, установив значение первого:

enum Cardsuit { Трефы = 1 , Бубны , Червы , Пики }; var c : Cardsuit = Cardsuit . Бриллианты ;           

Все значения могут быть установлены:

enum Cardsuit { Трефы = 1 , Бубны = 2 , Червы = 4 , Пики = 8 }; var c : Cardsuit = Cardsuit . Бриллианты ;                 

TypeScript поддерживает сопоставление числового значения с его именем. Например, это находит имя значения 2:

enum Cardsuit { Трефы = 1 , Бубны , Червы , Пики }; varsuitName : string = Cardsuit [ 2 ] ;           оповещение ( имя костюма );

Модули и пространства имен

TypeScript различает модули и пространства имен. Обе функции TypeScript поддерживают инкапсуляцию классов, интерфейсов, функций и переменных в контейнеры. Пространства имен (ранее внутренние модули) используют немедленно вызываемые функциональные выражения JavaScript для инкапсуляции кода, тогда как модули (ранее внешние модули) используют для этого шаблоны библиотеки JavaScript ( AMD или CommonJS ). [39]

Инструменты разработки

Компилятор

Компилятор TypeScript с именем tscнаписан на TypeScript . В результате его можно скомпилировать в обычный JavaScript и затем выполнить в любом движке JavaScript (например, в браузере). Пакет компилятора поставляется в комплекте с хостом сценариев, который может выполнять компилятор. Он также доступен в виде пакета Node.js , который использует Node.js в качестве хоста.

Текущая версия компилятора по умолчанию поддерживает ECMAScript 5. Разрешена опция для ECMAScript 2015, позволяющая использовать функции языка, эксклюзивные для этой версии (например, генераторы). Классы, несмотря на то, что они являются частью стандарта ECMAScript 2015, доступны в обоих режимах.

Поддержка IDE и редактора

Интеграция с инструментами автоматизации сборки

Используя плагины , TypeScript можно интегрировать со средствами автоматизации сборки , включая Grunt (grunt-ts [45] ), Apache Maven (TypeScript Maven Plugin [46] ), Gulp (gulp-typescript [47] ) и Gradle (TypeScript Gradle). Плагин [48] ).

Инструменты для линтинга

TSLint [49] сканирует код TypeScript на предмет соответствия набору стандартов и рекомендаций. ESLint , стандартный линтер JavaScript, также обеспечивает некоторую поддержку TypeScript через плагины сообщества. Однако неспособность ESLint использовать языковые службы TypeScript препятствовала определенным формам семантического анализа и общепрограммного анализа. [50] В начале 2019 года команда TSLint объявила об отказе от использования линтера в пользу typescript-eslint, совместного усилия команд TSLint, ESLint и TypeScript по объединению линтера под эгидой ESLint для повышения производительности, единства сообщества и доступности для разработчиков. [51]

Поставщик CodeDOM

CodeDOM [52] предоставляет типы, которые представляют общие типы элементов исходного кода, которые будут преобразованы в типы данных, классы, операторы и т. д. языка программирования через CodeDOMProvider. [53] Программисты используют CodeDOM и поставщик CodeDOM для создания генератора кода, который генерирует коды для домена приложения. Поставщик TypeScript CodeDOM [54] генерирует коды TypeScript в соответствии с CodeDOM.

История выпусков

Смотрите также

Рекомендации

Цитаты

  1. ^ "ТипСкрипт". КодПлекс . Архивировано из оригинала 3 апреля 2015 года . Проверено 26 апреля 2015 г.
  2. ^ «Выпуск TypeScript 5.3 microsoft/TypeScript» . 20 ноября 2023 г. Проверено 24 ноября 2023 г.
  3. ^ «Совместимость типов». Типскрипт . Проверено 21 марта 2018 г.
  4. ^ «Ранняя история F #» (PDF) . TypeScript находился под прямым влиянием F#: одним из создателей TypeScript был Люк Хобан, который начал работу над TypeScript (тогда он назывался Strada) сразу после работы над F# 2.0. Недавно он отметил влияние F# на ранние части дизайна TypeScript [Hoban 2017].
  5. Нельсон, Гэри (28 апреля 2020 г.). «Как ActionScript предвосхитил TypeScript». Середина . Проверено 9 июля 2022 г.
  6. Брайт, Питер (3 октября 2012 г.). «Microsoft TypeScript: нужный нам JavaScript или решение проблемы?». Арс Техника . Конде Наст . Проверено 26 апреля 2015 г.
  7. ^ «Программирование TypeScript с использованием кода Visual Studio». code.visualstudio.com . Проверено 12 февраля 2019 г.
  8. ^ "Борисянков/DefiniteTyped". Гитхаб . Проверено 26 апреля 2015 г.
  9. Фоли, Мэри Джо (1 октября 2012 г.). «Microsoft раскрывает секреты TypeScript, расширенной версии JavaScript». ЗДНет . CBS Интерактив . Проверено 26 апреля 2015 г.
  10. ^ Сомасегар, С. (1 октября 2012 г.). «Блог Сомасегара». Майкрософт . Проверено 26 апреля 2015 г.
  11. ^ Бакстер-Рейнольдс, Мэтт (1 октября 2012 г.). «Microsoft TypeScript: может ли отец C# спасти нас от тирании JavaScript?». ЗДНет . Проверено 26 апреля 2015 г.
  12. Джексон, Иоав (1 октября 2012 г.). «Microsoft расширяет Javascript для крупномасштабной разработки». ИТ-директор . Предприятие ИДГ . Архивировано из оригинала 17 декабря 2013 года . Проверено 26 апреля 2015 г.
  13. ^ «Microsoft расширяет JavaScript для крупномасштабной разработки» . Инфомир . ИДГ . 1 октября 2012 года . Проверено 26 апреля 2015 г.
  14. Тернер, Джонатан (2 апреля 2014 г.). «Анонс TypeScript 1.0». Блог команды TypeScript Language . Майкрософт . Проверено 20 октября 2021 г.
  15. ^ Мигель де Икаса (1 октября 2012 г.). «TypeScript: первые впечатления» . Проверено 12 октября 2012 г. Но TypeScript приносит разработчикам Unix лишь половину пользы от использования строго типизированного языка: строгую типизацию. Intellisense, автодополнение кода и рефакторинг — это инструменты, доступные только пользователям Visual Studio Professional в Windows. Нет поддержки Eclipse, MonoDevelop или Emacs для каких-либо функций языка.
  16. ^ «Microsoft TypeScript: может ли отец C # спасти нас от тирании JavaScript?» ЗДНет . 1 октября 2012 года . Проверено 12 октября 2012 г. И я считаю, что это довольно большая ошибка. Если вы создаете веб-приложения, которые работают не на Windows, вы, скорее всего, используете Mac и, скорее всего, не используете Visual Studio. Чтобы получить IntelliSense, вам понадобится подключаемый модуль Visual Studio. Все, что вы получаете без Visual Studio, — это строгая типизация. Вы не получаете тех преимуществ производительности, которые дает IntelliSense. .
  17. ^ «TypeStrong: единственный пакет TypeScript, который вам когда-либо понадобится» . Гитхаб . Проверено 21 июля 2016 г.
  18. Хиллар, Гастон (14 мая 2013 г.). «Работа с TypeScript в Visual Studio 2012». Журнал доктора Добба . Проверено 26 апреля 2015 г.
  19. ^ «TypeScript 0.9 поставляется с новым компилятором и поддержкой дженериков» . Регистр . 18 июня 2013 года . Проверено 26 апреля 2015 г.
  20. ^ Хейлсберг, Андерс (2 апреля 2014 г.). "Машинопись". Канал 9 . Майкрософт . Проверено 26 апреля 2015 г.
  21. Джексон, Иоав (25 февраля 2014 г.). «Microsoft TypeScript переходит в Visual Studio». Мир ПК . ИДГ . Проверено 26 апреля 2015 г.
  22. Тернер, Джонатан (21 июля 2014 г.). «Новый компилятор и переход на GitHub». Блог команды TypeScript Language . Майкрософт . Проверено 26 апреля 2015 г.[ постоянная мертвая ссылка ]
  23. Брайт, Питер (22 сентября 2016 г.). «TypeScript, JavaScript от Microsoft для больших приложений, достиг версии 2.0». Арс Техника . Конде Наст . Проверено 22 сентября 2016 г.
  24. ^ «Анонс TypeScript 3.0» . 30 июля 2018 года . Проверено 16 марта 2020 г.
  25. ^ «TypeScript 3.0». 30 июля 2018 года . Проверено 16 марта 2020 г.
  26. ^ ab «Анонс TypeScript 4.0». Типскрипт . 20 августа 2020 г. Проверено 30 октября 2020 г. .
  27. ^ «Документация — TypeScript 5.0» . www.typescriptlang.org . Проверено 18 мая 2023 г.
  28. Андерс Хейлсберг (5 октября 2012 г.). «Что такое TypeScript и почему с Андерсом Хейлсбергом». www.hanselminites.com . Проверено 15 января 2014 г.
  29. ^ С. Сомасегар (1 октября 2012 г.). «TypeScript: разработка JavaScript в масштабе приложения». msdn.com . Проверено 27 ноября 2013 г.
  30. ^ «Документация — TypeScript 5.2» . www.typescriptlang.org . Проверено 9 ноября 2023 г.
  31. ^ Клинт Финли (1 октября 2012 г.). «Microsoft представляет новый JavaScript-подобный язык программирования TypeScript». ТехКранч . Проверено 27 ноября 2013 г.
  32. ^ «Угловой 2». angular.io . Проверено 4 мая 2016 г.
  33. ^ «Добро пожаловать в TypeScript». typescriptlang.org . Майкрософт . Проверено 26 апреля 2015 г.
  34. ^ «TypeScript: Документация — повседневные типы» . www.typescriptlang.org/ . Проверено 30 марта 2021 г.
  35. ^ «Спецификация языка TypeScript, стр. 24» (PDF) . Архивировано из оригинала (PDF) 17 ноября 2013 года.
  36. Тернер, Джонатан (18 июня 2013 г.). «Анонс TypeScript 0.9». Блог команды TypeScript Language . Майкрософт .
  37. ^ «Общие типы в машинописном тексте». Майкрософт .
  38. ^ «Справочник - Союзы и типы пересечений» . www.typescriptlang.org . Проверено 30 ноября 2020 г. .
  39. Зёнке Сотманн (31 января 2014 г.). «Введение в систему модулей TypeScript». blog.oio.de. Архивировано из оригинала 1 февраля 2014 года . Проверено 21 февраля 2014 г.
  40. ^ Оливье Блох (1 октября 2012 г.). «Sublime Text, Vi, Emacs: TypeScript включен!». Майкрософт . Проверено 28 октября 2012 г.
  41. ^ «Поддержка TypeScript в WebStorm 6» . ДжетБрэйнс.
  42. ^ «Поддержка TypeScript в ReSharper 8.1» . ДжетБрэйнс. 28 октября 2013 г.
  43. ^ «ReSharper: расширение Visual Studio для разработчиков .NET от JetBrains» . ДжетБрэйнс .
  44. ^ "атом-машинопись" . Атом . Проверено 9 января 2020 г.
  45. ^ "TypeStrong/grunt-ts" . Гитхаб . Проверено 26 апреля 2015 г.
  46. ^ "ppedregal/typescript-maven-plugin". Гитхаб . Проверено 26 апреля 2015 г.
  47. ^ "ivogabe/gulp-typescript" . Гитхаб . Проверено 14 июля 2017 г.
  48. ^ "sothmann/typescript-gradle-plugin" . Гитхаб . Проверено 26 апреля 2015 г.
  49. ^ "ТСЛинт". palantir.github.io .
  50. Палантир (19 февраля 2019 г.). «ТСЛинт в 2019 году». Середина . Проверено 24 апреля 2019 г.
  51. ^ "TSLint Deprecated to Focus Support on typescript-eslint". InfoQ. Retrieved 24 April 2019.
  52. ^ "CodeDOM". learn.microsoft.com.
  53. ^ "CodeDOMProvider". learn.microsoft.com.
  54. ^ "TypeScript CodeDOM Provider". github.com.

Sources

External links