stringtranslate.com

Машинопись

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

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 и macOS . [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] Visual Studio 2013 Update 2 предоставил встроенную поддержку TypeScript. [21] Дальнейшие улучшения были сделаны в июле 2014 года, когда команда разработчиков анонсировала новый компилятор TypeScript, который, как утверждалось, имеет пятикратное увеличение производительности. Одновременно исходный код, который изначально размещался на CodePlex , был перемещен на GitHub . [22]

22 сентября 2016 года был выпущен TypeScript 2.0, в котором появилось несколько функций, включая возможность для программистов опционально применять безопасность null [ 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]

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

Функции

TypeScript добавляет следующие расширения синтаксиса в JavaScript:

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

Тип аннотаций

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

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

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

Все остальные непримитивные типы аннотируются с использованием имени класса, например Error. Массивы могут быть записаны двумя разными способами, которые синтаксически одинаковы: обобщенный синтаксис Array<T>и сокращение с T[].

Дополнительные встроенные типы данных — это кортежи, объединения neverи any:

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

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

Если тип не может быть выведен из-за отсутствия объявлений (например, в модуле JavaScript без типов), то по умолчанию используется динамический anyтип. Дополнительные типы модулей могут быть предоставлены с помощью файла объявлений .d.ts с использованием declare module "moduleName"синтаксиса.

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

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

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

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

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

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

Дженерики

TypeScript поддерживает универсальное программирование, используя синтаксис, похожий на Java . [33] Ниже приведен пример функции идентификации . [34]

идентификатор функции < T > ( x : T ) : T { return x ; }      

Классы

TypeScript использует тот же стиль аннотации для методов и полей класса, что и для функций и переменных соответственно. По сравнению с классами vanilla JavaScript, класс TypeScript также может реализовывать интерфейс через implementsключевое слово, использовать общие параметры, как в Java , и указывать публичные и приватные поля.

класс Person { публичное имя : строка ; частный возраст : число ; частная зарплата : число ;            конструктор ( имя : строка , возраст : число , зарплата : число ) { this.name = имя ; this.age = возраст ; this.salard = зарплата ; }                 toString ( ) : string { return ` $ { this.name } ( $ { this.age } ) ( $ { this.salrage } ) ` ; } }     

Типы союзов

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

function successor ( n : number | bigint ) : number | bigint { // типы, поддерживающие те же операции, не нуждаются в сужении return ++ n ; }           function dependsOnParameter ( v : string | Array < string > | number ) { // отдельные типы требуют сужения if ( v instanceof Array ) { // сделать что-то } else if ( typeof ( v ) === "string" ) { // сделать что-то еще } else { // должно быть числом } }                           

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

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

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

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

enum Cardsuit { Трефы = 1 , Бубны , Червы , Пики }; var c : Cardsuit = Карточная масть . Бубны ;           

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

enum Cardsuit { Трефы = 1 , Бубны = 2 , Червы = 4 , Пики = 8 }; var c : Cardsuit = Карточная масть . Бубны ;                 

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

enum Cardsuit { Трефы = 1 , Бубны , Червы , Пики }; var suitName : string = Cardsuit [ 2 ];           оповещение ( suitName );

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

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

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

Поскольку TypeScript — это просто надмножество JavaScript, существующий JavaScript можно быстро адаптировать к TypeScript, а программа TypeScript может беспрепятственно потреблять JavaScript. Компилятор может работать со всеми версиями ECMAScript версии 5 и выше, перенося современные функции, такие как классы и стрелочные функции, в их старые аналоги.

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

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

Компилятор

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

Компилятор может «нацеливаться» на определенную редакцию ECMAScript (например, ES5 для совместимости с устаревшими браузерами), но по умолчанию компилирует в соответствии с новейшими стандартами.

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

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

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

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

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

Поставщик CodeDOM

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

История релизов

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

Ссылки

Цитаты

  1. ^ "TypeScript". CodePlex . Архивировано из оригинала 3 апреля 2015 г. Получено 26 апреля 2015 г.
  2. ^ "Release 5.6.3". 9 октября 2024 г. Получено 27 октября 2024 г.
  3. ^ "Совместимость типов". TypeScript . Архивировано из оригинала 12 марта 2018 г. Получено 21 марта 2018 г.
  4. ^ "The Early History of F#" (PDF) . Архивировано (PDF) из оригинала 9 августа 2024 г. . Получено 5 февраля 2024 г. TypeScript был напрямую под влиянием F#: одним из создателей TypeScript был Люк Хобан, который начал TypeScript (тогда называвшийся Strada) сразу после работы над F# 2.0. Недавно он отметил влияние F# на ранние части дизайна TypeScript [Hoban 2017].
  5. ^ Нельсон, Гэри (28 апреля 2020 г.). «Как ActionScript предвосхитил TypeScript». Medium . Архивировано из оригинала 9 августа 2024 г. . Получено 9 июля 2022 г. .
  6. ^ Bright, Peter (3 октября 2012 г.). «Microsoft TypeScript: JavaScript, который нам нужен, или решение, ищущее проблему?». Ars Technica . Condé Nast . Архивировано из оригинала 9 октября 2018 г. . Получено 26 апреля 2015 г. .
  7. ^ "Программирование TypeScript с помощью Visual Studio Code". code.visualstudio.com . Архивировано из оригинала 22 сентября 2022 г. Получено 12 февраля 2019 г.
  8. ^ "borisyankov/DefinitelyTyped". GitHub . Архивировано из оригинала 1 ноября 2015 . Получено 26 апреля 2015 .
  9. ^ Фоли, Мэри Джо (1 октября 2012 г.). «Microsoft раскрывает TypeScript, надмножество JavaScript». ZDNet . CBS Interactive . Архивировано из оригинала 13 ноября 2014 г. . Получено 26 апреля 2015 г. .
  10. ^ Somasegar, S. (1 октября 2012 г.). "Блог Somasegar". Microsoft. Архивировано из оригинала 22 апреля 2015 г. Получено 26 апреля 2015 г.
  11. ^ Baxter-Reynolds, Matt (1 октября 2012 г.). «Microsoft TypeScript: может ли отец C# спасти нас от тирании JavaScript?». ZDNet . Архивировано из оригинала 3 августа 2014 г. Получено 26 апреля 2015 г.
  12. ^ Джексон, Джоаб (1 октября 2012 г.). «Microsoft расширяет возможности Javascript для крупномасштабной разработки». CIO . IDG Enterprise . Архивировано из оригинала 17 декабря 2013 г. . Получено 26 апреля 2015 г. .
  13. ^ "Microsoft расширяет возможности JavaScript для крупномасштабной разработки". InfoWorld . IDG . 1 октября 2012 г. Архивировано из оригинала 31 мая 2013 г. Получено 26 апреля 2015 г.
  14. ^ Тернер, Джонатан (2 апреля 2014 г.). «Анонс TypeScript 1.0». Блог команды разработчиков языка TypeScript . Microsoft. Архивировано из оригинала 5 сентября 2015 г. Получено 20 октября 2021 г.
  15. ^ Мигель де Икаса (1 октября 2012 г.). "TypeScript: первые впечатления". Архивировано из оригинала 24 февраля 2019 г. . Получено 12 октября 2012 г. . Но TypeScript обеспечивает только половину ценности использования строго типизированного языка для разработчиков Unix: строгую типизацию. Intellisense, автодополнение кода и рефакторинг — это инструменты, которые доступны только пользователям Visual Studio Professional в Windows. Поддержка Eclipse, MonoDevelop или Emacs для каких-либо языковых функций отсутствует.
  16. ^ "Microsoft TypeScript: может ли отец C# спасти нас от тирании JavaScript?". ZDNet . 1 октября 2012 г. Архивировано из оригинала 3 августа 2014 г. Получено 12 октября 2012 г. И я думаю, что это довольно большая ошибка. Если вы создаете веб-приложения, которые работают на чем-либо, кроме Windows, вы, скорее всего, используете Mac и, скорее всего, не используете Visual Studio. Вам нужен плагин Visual Studio, чтобы получить IntelliSense. Все, что вы получаете без Visual Studio, — это строгая типизация. Вы не получите преимуществ производительности, которые дает IntelliSense. .
  17. ^ "TypeStrong: единственный пакет TypeScript, который вам когда-либо понадобится". GitHub . Архивировано из оригинала 19 декабря 2018 г. Получено 21 июля 2016 г.
  18. ^ Хиллар, Гастон (14 мая 2013 г.). «Работа с TypeScript в Visual Studio 2012». Журнал доктора Добба . Архивировано из оригинала 29 сентября 2018 г. Получено 26 апреля 2015 г.
  19. ^ "TypeScript 0.9 выходит с новым компилятором и поддержкой дженериков". The Register . 18 июня 2013 г. Архивировано из оригинала 11 марта 2018 г. Получено 26 апреля 2015 г.
  20. ^ Hejlsberg, Anders (2 апреля 2014 г.). "TypeScript". Channel 9 . Microsoft. Архивировано из оригинала 25 мая 2015 г. Получено 26 апреля 2015 г.
  21. ^ Джексон, Джоаб (25 февраля 2014 г.). «Microsoft TypeScript переходит в Visual Studio». PC World . IDG . Архивировано из оригинала 11 марта 2016 г. . Получено 26 апреля 2015 г. .
  22. ^ Тернер, Джонатан (21 июля 2014 г.). «Новый компилятор и переход на GitHub». Блог команды разработчиков языка TypeScript . Microsoft. Архивировано из оригинала 22 июля 2014 г. Получено 26 апреля 2015 г.
  23. ^ Bright, Peter (22 сентября 2016 г.). «TypeScript, JavaScript от Microsoft для больших приложений, достигает версии 2.0». Ars Technica . Condé Nast . Архивировано из оригинала 21 декабря 2018 г. . Получено 22 сентября 2016 г. .
  24. ^ "Announcing TypeScript 3.0". 30 июля 2018 г. Архивировано из оригинала 30 мая 2020 г. Получено 16 марта 2020 г.
  25. ^ "TypeScript 3.0". 30 июля 2018 г. Архивировано из оригинала 6 июня 2020 г. Получено 16 марта 2020 г.
  26. ^ ab "Announcing TypeScript 4.0". TypeScript . 20 августа 2020 г. Архивировано из оригинала 9 августа 2024 г. Получено 30 октября 2020 г.
  27. ^ "Documentation – TypeScript 5.0". www.typescriptlang.org . Архивировано из оригинала 9 августа 2024 . Получено 18 мая 2023 .
  28. ^ Андерс Хейлсберг (5 октября 2012 г.). «Что такое TypeScript и почему с Андерсом Хейлсбергом». www.hanselminutes.com. Архивировано из оригинала 27 декабря 2018 г. Получено 15 января 2014 г.
  29. ^ S. Somasegar (1 октября 2012 г.). «TypeScript: разработка JavaScript в масштабе приложения». msdn.com. Архивировано из оригинала 22 апреля 2015 г. Получено 27 ноября 2013 г.
  30. ^ "Documentation – TypeScript 5.2". www.typescriptlang.org . Архивировано из оригинала 9 августа 2024 . Получено 9 ноября 2023 .
  31. ^ "TypeScript Language Specification p.24" (PDF) . Архивировано из оригинала (PDF) 17 ноября 2013 г.
  32. ^ "TypeScript: Documentation – Everyday Types". www.typescriptlang.org/ . Архивировано из оригинала 9 августа 2024 г. Получено 30 марта 2021 г.
  33. ^ Тернер, Джонатан (18 июня 2013 г.). "Анонс TypeScript 0.9". Блог команды разработчиков языка TypeScript . Microsoft . Архивировано из оригинала 26 ноября 2013 г. Получено 18 июня 2013 г.
  34. ^ "Generics in Typescript". Microsoft . Архивировано из оригинала 5 апреля 2020 г. Получено 8 апреля 2020 г.
  35. ^ "Справочник - Объединения и типы пересечений". www.typescriptlang.org . Получено 30 ноября 2020 г. .
  36. ^ Sönke Sothmann (31 января 2014 г.). «Введение в модульную систему TypeScript». blog.oio.de. Архивировано из оригинала 1 февраля 2014 г. Получено 21 февраля 2014 г.
  37. ^ "Welcome to TypeScript". typescriptlang.org . Microsoft . Архивировано из оригинала 10 марта 2018 г. Получено 26 апреля 2015 г.
  38. Оливье Блох (1 октября 2012 г.). «Sublime Text, Vi, Emacs: TypeScript enabled!». Microsoft . Архивировано из оригинала 29 октября 2012 г. Получено 28 октября 2012 г.
  39. ^ "Поддержка TypeScript в WebStorm 6". JetBrains. Архивировано из оригинала 2 июня 2016 года . Получено 20 апреля 2013 года .
  40. ^ "Поддержка TypeScript в ReSharper 8.1". JetBrains. 28 октября 2013 г. Архивировано из оригинала 2 февраля 2014 г. Получено 21 января 2014 г.
  41. ^ "ReSharper: расширение Visual Studio для разработчиков .NET от JetBrains". JetBrains .
  42. ^ "atom-typescript". Atom . Архивировано из оригинала 4 октября 2016 . Получено 9 января 2020 .
  43. ^ "TypeStrong/grunt-ts". GitHub . Архивировано из оригинала 16 апреля 2020 г. Получено 26 апреля 2015 г.
  44. ^ "ppedregal/typescript-maven-plugin". GitHub . Архивировано из оригинала 11 июня 2018 г. Получено 26 апреля 2015 г.
  45. ^ "ivogabe/gulp-typescript". GitHub . Архивировано из оригинала 11 июня 2018 г. Получено 14 июля 2017 г.
  46. ^ "sothmann/typescript-gradle-plugin". GitHub . Архивировано из оригинала 11 июня 2018 г. Получено 26 апреля 2015 г.
  47. ^ "TSLint". palantir.github.io . Архивировано из оригинала 21 декабря 2022 г. Получено 11 февраля 2019 г.
  48. ^ Palantir (19 февраля 2019 г.). "TSLint в 2019 году". Medium . Получено 24 апреля 2019 г. .
  49. ^ "TSLint устарел, чтобы сосредоточиться на поддержке typescript-eslint". InfoQ . Архивировано из оригинала 9 августа 2024 г. Получено 24 апреля 2019 г.
  50. ^ "CodeDOM". learn.microsoft.com .
  51. ^ "CodeDOMProvider". learn.microsoft.com . Архивировано из оригинала 9 августа 2024 г. . Получено 8 декабря 2023 г. .
  52. ^ "TypeScript CodeDOM Provider". github.com . Архивировано из оригинала 9 августа 2024 . Получено 26 февраля 2024 .

Источники

Внешние ссылки