Парадигма | Мультипарадигма : функциональная, общая, императивная, объектно-ориентированная |
---|---|
Разработано | Microsoft |
Разработчик | Microsoft |
Впервые появился | 1 октября 2012 г. ; 8 лет назад ( 2012-10-01) |
Стабильный выпуск | 4.2.4 / 9 апреля 2021 г. ; 4 месяца назад ( 9 апреля 2021 г.) |
Предварительный выпуск | 4.3 Beta / 9 апреля 2021 г. ; 4 месяца назад ( 9 апреля 2021 г.) |
Печатная дисциплина | Утка, постепенная, структурная |
Лицензия | Лицензия Apache 2.0 |
Расширения имени файла | .ts,.tsx |
Веб-сайт | www.typescriptlang.org |
Под влиянием | |
C #, Java, JavaScript | |
Под влиянием | |
AtScript, AssemblyScript |
TypeScript - это язык программирования, разработанный и поддерживаемый Microsoft. Это строгая синтаксическая надстройка из JavaScript и добавляет дополнительный статический набор текста на язык. TypeScript предназначен для разработки больших приложений и транскомпилируется в JavaScript. Поскольку TypeScript является надмножеством JavaScript, существующие программы JavaScript также являются допустимыми программами TypeScript.
Машинопись может быть использована для разработки приложений JavaScript как для клиентской стороны и на стороне сервера исполнения (как с Node.js или Дино ). Есть несколько вариантов транскомпиляции. Можно использовать либо средство проверки TypeScript по умолчанию, либо компилятор Babel для преобразования TypeScript в JavaScript.
TypeScript поддерживает файлы определений, которые могут содержать информацию о типах существующих библиотек JavaScript, так же как файлы заголовков C ++ могут описывать структуру существующих объектных файлов. Это позволяет другим программам использовать значения, определенные в файлах, как если бы они были статически типизированными объектами TypeScript. Есть файлы заголовков сторонних для популярных библиотек, таких как JQuery, MongoDB и D3.js. Заголовки TypeScript для базовых модулей Node.js также доступны, что позволяет разрабатывать программы Node.js в рамках TypeScript.
Компилятор TypeScript сам написан на TypeScript и скомпилирован в JavaScript. Он находится под лицензией Apache License 2.0. TypeScript включен как первоклассный язык программирования в Microsoft Visual Studio 2013 с обновлением 2 и более поздних версий, наряду с C # и другими языками Microsoft. Официальное расширение позволяет Visual Studio 2012 также поддерживать TypeScript. Андерс Хейлсберг, ведущий архитектор C # и создатель Delphi и Turbo Pascal, работал над разработкой TypeScript.
TypeScript был впервые обнародован в октябре 2012 года (в версии 0.8), после двух лет внутренней разработки в Microsoft. Вскоре после объявления Мигель де Икаса похвалил сам язык, но раскритиковал отсутствие полноценной поддержки IDE, кроме Microsoft Visual Studio, которая в то время не была доступна в Linux и OS X. По состоянию на апрель 2021 года есть поддержка в других IDE и текстовых редакторах, включая Emacs, Vim, Webstorm, Atom и собственный код Visual Studio от Microsoft.
В TypeScript 0.9, выпущенном в 2013 году, добавлена поддержка дженериков. TypeScript 1.0 был выпущен на конференции разработчиков Microsoft Build в 2014 году. Visual Studio 2013 Update 2 обеспечивает встроенную поддержку TypeScript.
В июле 2014 года команда разработчиков анонсировала новый компилятор TypeScript, заявив о приросте производительности в 5 раз. Одновременно исходный код, который изначально размещался на CodePlex, был перемещен на GitHub.
22 сентября 2016 года был выпущен TypeScript 2.0; он представил несколько функций, в том числе возможность для программистов опционально предотвращать присвоение null
значений переменным, что иногда называют ошибкой на миллиард долларов.
TypeScript 3.0 был выпущен 30 июля 2018 года, в него было внесено множество языковых дополнений, таких как кортежи в параметрах отдыха и выражениях распространения, параметры отдыха с типами кортежей, общие параметры отдыха и т. Д.
TypeScript 4.0 был выпущен 20 августа 2020 года. Хотя 4.0 не внес никаких критических изменений, он добавил языковые функции, такие как Custom JSX Factories и Variadic Tuple Types.
TypeScript возник из-за недостатков JavaScript для разработки крупномасштабных приложений как в Microsoft, так и среди внешних клиентов. Проблемы, связанные со сложным кодом JavaScript, привели к спросу на специальные инструменты, упрощающие разработку компонентов на этом языке.
Разработчики TypeScript искали решение, которое не нарушало бы совместимость со стандартом и его кроссплатформенную поддержку. Зная, что текущее предложение стандарта ECMAScript обещает в будущем поддержку программирования на основе классов, TypeScript был основан на этом предложении. Это привело к созданию компилятора JavaScript с набором расширений синтаксического языка, надмножеством, основанным на предложении, которое преобразует расширения в обычный JavaScript. В этом смысле TypeScript был предварительным просмотром того, чего ожидать от ECMAScript 2015. Уникальным аспектом, не содержащимся в предложении, но добавленным в TypeScript, является необязательная статическая типизация, которая обеспечивает статический анализ языка, что облегчает поддержку инструментов и IDE.
TypeScript добавляет поддержку таких функций, как классы, модули и синтаксис стрелочных функций, как определено в стандарте ECMAScript 2015.
TypeScript - это языковое расширение, которое добавляет функции в ECMAScript 6. Дополнительные функции включают:
Следующие функции перенесены из ECMAScript 2015:
Синтаксически TypeScript очень похож на JScript.NET, другую реализацию Microsoft языкового стандарта ECMA-262, которая добавила поддержку статической типизации и классических объектно-ориентированных языковых функций, таких как классы, наследование, интерфейсы и пространства имен.
TypeScript - это строгий надмножество ECMAScript 2015, который сам по себе является надмножеством ECMAScript 5, обычно называемого JavaScript. Таким образом, программа JavaScript также является допустимой программой TypeScript, а программа TypeScript может легко использовать JavaScript. По умолчанию компилятор нацелен на ECMAScript 5, текущий преобладающий стандарт, но также может генерировать конструкции, используемые в ECMAScript 3 или 2015.
С TypeScript можно использовать существующий код JavaScript, включать популярные библиотеки JavaScript и вызывать код, сгенерированный TypeScript, из другого JavaScript. Объявления типов для этих библиотек предоставляются с исходным кодом.
TypeScript обеспечивает статическую типизацию с помощью аннотаций типов, чтобы включить проверку типа во время компиляции. Это необязательно, и его можно игнорировать, чтобы использовать обычную динамическую типизацию JavaScript.
function add(left: number, right: number): number { return left + right; }
Аннотации для примитивных типов number
, boolean
и string
. Машинопись также поддерживает типы данных со следующими примечаниями Array
, Enums
, void
.
Вновь введенные типы данных: Tuple
, Union
, never
и any
. Tuple
Типом является массив с предопределенными типами данных для каждого индекса. Переменная, которая содержит более одного типа данных, называется Union
типом. Когда вы уверены, что что-то никогда не произойдет, вы используете never
шрифт. Слабо- или динамически типизированные структуры относятся к any
типу.
Аннотации типов можно экспортировать в отдельный файл объявлений, чтобы сделать информацию о типах доступной для сценариев TypeScript, использующих типы, уже скомпилированные в JavaScript. Аннотации могут быть объявлены для существующей библиотеки JavaScript, как это было сделано для Node.js и jQuery.
Компилятор TypeScript использует вывод типа для вывода типов, когда типы не указаны. Например, add
метод в приведенном выше коде будет считаться возвращающим, number
даже если не была предоставлена аннотация типа возвращаемого значения. Это основано на статических типах left
и right
существовании numbers
, а также на знании компилятором того, что результатом сложения двух numbers
всегда является number
. Однако явное объявление типа возвращаемого значения позволяет компилятору проверить правильность.
Если из-за отсутствия объявлений тип не может быть определен, по умолчанию используется динамический any
тип. Значение any
типа поддерживает те же операции, что и значение в JavaScript, и для операций со any
значениями выполняется минимальная проверка статического типа.
Когда сценарий TypeScript компилируется, есть возможность сгенерировать файл объявления (с расширением .d.ts
), который функционирует как интерфейс для компонентов в скомпилированном JavaScript. В процессе компилятор удаляет все тела функций и методов и сохраняет только сигнатуры экспортируемых типов. Полученный файл объявления затем можно использовать для описания экспортированных виртуальных типов TypeScript библиотеки или модуля JavaScript, когда сторонний разработчик использует его из TypeScript.
Концепция файлов объявлений аналогична концепции файла заголовка в C / C ++.
declare namespace arithmetics { add(left: number, right: number): number; subtract(left: number, right: number): number; multiply(left: number, right: number): number; divide(left: number, right: number): number; }
Файлы объявления типов могут быть написаны вручную для существующих библиотек JavaScript, как это было сделано для jQuery и Node.js.
Большие коллекции файлов объявлений для популярных библиотек JavaScript размещены на GitHub в DefinentyTyped.
TypeScript поддерживает классы ECMAScript 2015, которые интегрируют дополнительную поддержку аннотаций типов.
class Person { private name: string; private age: number; private salary: number; constructor(name: string, age: number, salary: number) { this.name = name; this.age = age; this.salary = salary; } toString(): string { return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4 } }
TypeScript поддерживает универсальное программирование. Ниже приведен пример функции идентификации.
function idlt;Tgt;(x: T): T { return x; }
TypeScript различает модули и пространства имен. Обе функции TypeScript поддерживают инкапсуляцию классов, интерфейсов, функций и переменных в контейнеры. Пространства имен (ранее внутренние модули) используют немедленно вызываемое функциональное выражение JavaScript для инкапсуляции кода, тогда как модули (ранее внешние модули) используют для этого шаблоны библиотеки JavaScript ( AMD или CommonJS ).
Машинописи компилятор, названный tsc
, как написано в машинопись. В результате его можно скомпилировать в обычный JavaScript, а затем выполнить в любом движке JavaScript (например, в браузере). Пакет компилятора поставляется вместе с хостом сценария, который может выполнять компилятор. Он также доступен в виде пакета Node.js, который использует Node.js в качестве хоста.
Текущая версия компилятора по умолчанию поддерживает ECMAScript 5. Можно настроить таргетинг на ECMAScript 2015, чтобы использовать языковые функции, эксклюзивные для этой версии (например, генераторы). Классы, несмотря на то, что они являются частью стандарта ECMAScript 2015, доступны в обоих режимах.
Используя подключаемые модули, TypeScript можно интегрировать со средствами автоматизации сборки, включая Grunt (grunt-ts), Apache Maven ( подключаемый модуль TypeScript Maven), Gulp (gulp-typescript) и Gradle ( подключаемый модуль TypeScript Gradle).
TSLint сканирует код TypeScript на соответствие набору стандартов и руководств. ESLint, стандартный линтер JavaScript, также предоставил некоторую поддержку TypeScript через плагины сообщества. Однако неспособность ESLint использовать языковые сервисы TypeScript препятствовала определенным формам семантического линтинга и анализа в масштабе всей программы. В начале 2019 года команда TSLint объявила об отказе от линтера в пользу typescript-eslint
совместных усилий команд TSLint, ESLint и TypeScript по консолидации линтинга под эгидой ESLint для повышения производительности, единства сообщества и доступности для разработчиков. Для использования TypeScript с ESLint вам необходимо добавить @typescript-eslint/eslint-plugin
и @typescript-eslint/parser
.
Номер версии | Дата выхода | Существенные изменения |
---|---|---|
0,8 | 1 октября 2012 г. ( 2012-10-01) | |
0,9 | 18 июня 2013 г. ( 2013-06-18) | |
1.0 | 12 апреля 2014 г. ( 2014-04-12) | |
1.1 | 6 октября 2014 г. ( 2014-10-06) | улучшения производительности |
1.3 | 12 ноября 2014 г. ( 2014-11-12) | protected модификатор, типы кортежей |
1.4 | 20 января 2015 г. ( 2015-01-20) | Типы профсоюзов, let и const декларация, строки шаблона, типа охранники, типа псевдонимы |
1.5 | 20 июля 2015 г. ( 2015-07-20) | Модули ES6, namespace ключевое слово, for..of поддержка, декораторы |
1.6 | 16 сентября 2015 г. ( 2015-09-16) | Поддержка JSX, типы пересечений, объявления локальных типов, абстрактные классы и методы, функции защиты типов, определяемые пользователем |
1,7 | 30 ноября 2015 г. ( 2015-11-30) | async и await поддержка, |
1,8 | 22 февраля 2016 г. ( 22.02.2016) | обобщения ограничений, ошибки анализа потока управления, типы строковых литералов, allowJs |
2.0 | 22 сентября 2016 г. ( 2016-09-22) | типы с нулевым и неопределенным значением, анализ типов на основе потока управления, типы размеченных объединений, never тип, readonly ключевое слово, тип this для функций |
2.1 | 8 ноября 2016 г. ( 2016-11-08) | keyof и типы поиска, сопоставленные типы, распространение и отдых объектов, |
2.2 | 22 февраля 2017 г. ( 2017-02-22) | смешанные классы, object тип, |
2.3 | 27 апреля 2017 г. ( 2017-04-27) | async итерация, стандартные значения параметров по умолчанию, строгая опция |
2,4 | 27 июн 2017 ( 2017-06-27) | выражения динамического импорта, строковые перечисления, улучшенный вывод для обобщений, строгая контравариантность для параметров обратного вызова |
2,5 | 31 августа 2017 г. ( 2017-08-31) | необязательные переменные предложения catch |
2,6 | 31 октября 2017 г. ( 2017-10-31) | строгие типы функций |
2,7 | 31 января 2018 г. ( 2018-01-31) | свойства с постоянными именами, кортежи фиксированной длины |
2,8 | 27 марта 2018 г. ( 2018-03-27) | условные типы, улучшенные keyof с помощью типов пересечений |
2,9 | 14 мая 2018 ( 2018-05-14) | поддержка символов и числовых литералов в типах keyof и сопоставленных объектов |
3.0 | 30 июля 2018 г. ( 2018-07-30) | ссылки на проекты, извлечение и распространение списков параметров с кортежами |
3.1 | 27 сентября 2018 г. ( 2018-09-27) | отображаемые типы кортежей и массивов |
3,2 | 30 ноября 2018 г. ( 2018-11-30) | более строгая проверка привязки, вызова и применения |
3.3 | 31 января 2019 г. ( 2019-01-31) | смягченные правила для методов типов объединения, инкрементальные сборки для составных проектов |
3,4 | 29 марта 2019 г. ( 2019-03-29) | более быстрые инкрементные сборки, вывод типа из общих функций, модификатор только для чтения для массивов, константные утверждения, глобальная проверка типов this |
3.5 | 29 мая 2019 ( 2019-05-29) | более быстрые инкрементные сборки, опускание вспомогательного типа, улучшенная проверка лишних свойств в типах объединений, более умная проверка типов объединений |
3,6 | 28 августа 2019 г. ( 2019-08-28) | Более строгие генераторы, более точное распределение массивов, лучшая поддержка Unicode для идентификаторов |
3,7 | 5 ноября 2019 г. ( 2019-11-05) | Необязательная цепочка, нулевое слияние |
3.8 | 20 февраля 2020 г. ( 2020-02-20) | Импорт и экспорт только типа, частные поля ECMAScript, ожидание верхнего уровня |
3.9 | 12 мая 2020 ( 2020-05-12) | Улучшения в выводе, улучшения скорости |
4.0 | 20 августа 2020 г. ( 2020-08-20) | Типы кортежей с переменным числом аргументов, помеченные элементы кортежа |
4.1 | 19 ноября 2020 г. ( 2020-11-19) | Типы шаблонных литералов, перераспределение клавиш в сопоставленных типах, рекурсивные условные типы |
4.2 | 25 февраля 2021 г. ( 2021-02-25) | Более разумное сохранение псевдонимов типов, ведущие / средние элементы в типах кортежей, более строгие проверки для in оператора, abstract создание подписей |
4.3 | 26 мая 2021 г. | Раздельные типы записи в свойствах, override а также --noImplicitOverride улучшения флагов и типов строк в шаблоне |
4.4 | 26 августа 2021 г. | Анализ потока управления псевдонимов условий и дискриминантов, подписей индексов шаблонов строк символов и шаблонов |