Что такое TypeScript и почему мне следует использовать его вместо JavaScript?[закрыто]

StackOverflow https://stackoverflow.com//questions/12694530

  •  12-12-2019
  •  | 
  •  

Вопрос

Можете ли вы описать, что такое язык TypeScript?

Что он может такого, чего не могут сделать JavaScript или доступные библиотеки, что дало бы мне повод задуматься об этом?

Это было полезно?

Решение

Я изначально написал этот ответ, когда напечатает горячие прессы. Пять лет спустя это обзор OK, но посмотрите AT Ответ Lodewijk ниже для более глубины

1000ft Вид ...

Thmyscript - это суперцепция JavaScript, который в основном предоставляет дополнительные статические набора, классы и интерфейсы. Одним из больших преимуществ является включение IDES для предоставления среды более богатой среды для обнаружения общих ошибок при вводе кода .

Чтобы получить представление о том, что я имею в виду, смотреть вводное видео Microsoft на языке.

Для большого проекта JavaScript, принятие напечатает на фирмере, может привести к более надежному программному обеспечению, пока не будет развертываться, когда будет работать обычное приложение JavaScript.

Это открытый источник, но вы получаете умный Intellisense, поскольку вы вводите, если вы используете поддерживаемую IDE. Первоначально это было только Visual Studio Microsoft (также отмеченная в сообщении в блоге от miguel de icaza ). В наши дни Другие удостоверения IDE также предлагают поддержку TymerctScript тоже .

Есть ли в ней другие технологии?

Есть CoffeeScript , но это действительно служит другому назначению. Imho, CoffeeScript обеспечивает читаемость для людей, но Teadncript также обеспечивает глубокую читаемость для инструментов через его дополнительный статический набрав (см. Это Последние блог Post для немного более критики). Есть также dart Но это полноценно на замену JavaScript (хотя это может производить код JavaScript ) / P >.

Пример

В качестве примера, вот несколько типографических элементов (вы можете играть с этим в Therebry Playground )

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}  
.

И вот JavaScript это будет производить

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();
.

Обратите внимание, как TypeScript определяет тип переменных элементов и параметров метода класса. Это удаляется при переводе в JavaScript, но используется IDE и компилятором для обнаружения ошибок, таких как передача числового типа к конструктору.

Он также способен использовать типы, которые не явно объявляются, например, он определяет метод greet() возвращает строку.

Отладка Teamscript

Многие браузеры и идентификаторы предлагают прямую поддержку отладки через SOILCEMAPS. См. Этот вопрос переполнения стека для более подробной информации: Отладка Teamplection Code с Visual Studio / P >.

Хотите узнать больше?

I изначально написал этот ответ, когда TypeyctScript по-прежнему горячие прессы. Проверьте Ответ Lodewijk к этому вопросу для некоторых более текущих деталей.

Другие советы

Связь TypeScript с JavaScript

TypeScript - это напечатанный суперсет JavaScript, который компилируется для простого JavaScript - typescriptlang.org.

JavaScript — это язык программирования, разработанный Технический комитет EMCA 39, который представляет собой группу людей, состоящую из множества различных заинтересованных сторон.TC39 — это комитет, организованный ЭКМА:внутренняя организация по стандартизации.JavaScript имеет множество различных реализаций от разных поставщиков (например,Google, Microsoft, Oracle и др.).Цель JavaScript — стать лингва-франка в Интернете.

TypeScript — это расширенная версия языка JavaScript, имеющая один компилятор с открытым исходным кодом и разрабатываемая в основном одним поставщиком:Майкрософт.Цель TypeScript — помочь выявить ошибки на ранней стадии в системе типов и сделать разработку JavaScript более эффективной.

По сути, TypeScript достигает своих целей тремя способами:

  1. Поддержка современных функций JavaScript. - Язык JavaScript (а не среда выполнения) стандартизирован посредством ECMAScript стандарты.Не все браузеры и среды выполнения JavaScript поддерживают все функции всех стандартов ECMAScript (см. обзор).TypeScript позволяет использовать многие из новейших функций ECMAScript и переводит их в более старые цели ECMAScript по вашему выбору (см. список компилировать цели под --target вариант компилятора).Это означает, что вы можете безопасно использовать новые функции, такие как модули, лямбда-функции, классы, оператор расширения и деструктуризацию, сохраняя при этом обратную совместимость со старыми браузерами и средами выполнения JavaScript.

  2. Расширенная система типов - Поддержка типов не является частью стандарта ECMAScript и, скорее всего, никогда не будет связана с интерпретируемой, а не компилируемой природой JavaScript.Система типов TypeScript невероятно богата и включает в себя:интерфейсы, перечисления, гибридные типы, дженерики, типы объединения/пересечения, модификаторы доступа и многое другое.А Официальный веб-сайт TypeScript дает обзор этих функций.Система типов Typescript находится на одном уровне с большинством других типизированных языков и в некоторых случаях, возможно, более мощна.

  3. Поддержка инструментов разработчика - Компилятор TypeScript может работать в фоновом режиме для поддержки как инкрементной компиляции, так и интеграции IDE, что упрощает навигацию, выявление проблем, проверку возможностей и рефакторинг базы кода.

Связь TypeScript с другими языками таргетинга JavaScript

TypeScript имеет уникальную философию по сравнению с другими языками, которые компилируются в JavaScript.Код JavaScript является допустимым кодом TypeScript;TypeScript — это расширенная версия JavaScript.Вы можете почти переименовать свой .js файлы в .ts файлы и начните использовать TypeScript (см. «Взаимодействие JavaScript» ниже).Файлы TypeScript компилируются в читаемый JavaScript, поэтому возможен обратный переход и понимание скомпилированного TypeScript совсем не сложно.TypeScript развивает успехи JavaScript, одновременно улучшая его недостатки.

С одной стороны, у вас есть инструменты, ориентированные на будущее, которые берут современные стандарты ECMAScript и компилируют их в более старые версии JavaScript, причем Babel является самой популярной.С другой стороны, есть языки, которые могут полностью отличаться от JavaScript, ориентированных на JavaScript, например CoffeeScript, Clojure, Dart, Elm, Haxe, Scala.js и целый ряд других (см. список).Эти языки, хотя они и могут быть лучше, чем будущее JavaScript, подвергаются большему риску не найти достаточного распространения, чтобы гарантировать их будущее.У вас также могут возникнуть проблемы с поиском опытных разработчиков для некоторых из этих языков, хотя те, кого вы найдете, часто могут быть более полными энтузиазма.Взаимодействие с JavaScript также может быть немного более сложным, поскольку оно дальше от того, чем на самом деле является JavaScript.

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

Опционально статическая типизация и вывод типа

JavaScript динамически типизирован.Это означает, что JavaScript не знает, к какому типу относится переменная, до тех пор, пока она не будет фактически создана во время выполнения.Это также означает, что может быть слишком поздно.TypeScript добавляет поддержку типов в JavaScript.Ошибки, вызванные ложным предположением о том, что какая-то переменная относится к определенному типу, могут быть полностью устранены, если вы правильно разыграете свои карты (насколько строго вы вводите свой код или вводите ли вы его вообще, зависит от вас).

TypeScript делает ввод текста немного проще и менее явным за счет использования вывода типа.Например: var x = "hello" в TypeScript то же самое, что и var x : string = "hello".Тип просто выводится из его использования.Даже если вы не вводите типы явно, они все равно существуют, чтобы уберечь вас от действий, которые в противном случае могли бы привести к ошибке во время выполнения.

TypeScript по умолчанию печатается дополнительно.Например function divideByTwo(x) { return x / 2 } — допустимая функция в TypeScript, которую можно вызвать с помощью любой своего рода параметр, хотя вызов его со строкой, очевидно, приведет к время выполнения ошибка.Точно так же, как вы привыкли в JavaScript.Это работает, потому что, когда тип не был назначен явно и тип не может быть выведен, как в примере с разделениемByTwo, TypeScript неявно назначит тип. any.Это означает, что сигнатура типа функции DivideByTwo автоматически становится function divideByTwo(x : any) : any.Существует флаг компилятора, запрещающий такое поведение: --noImplicitAny.Включение этого флага обеспечивает большую степень безопасности, но также означает, что вам придется больше печатать.

С типами связана стоимость.Во-первых, это кривая обучения, а во-вторых, конечно, вам потребуется немного больше времени, чтобы настроить кодовую базу с использованием правильной строгой типизации.По моему опыту, эти затраты полностью окупаются для любой серьезной базы кода, которой вы делитесь с другими. Масштабное исследование языков программирования и качества кода в Github предполагает, что «статически типизированные языки, как правило, менее подвержены дефектам, чем динамические типы, и в том же отношении строгая типизация лучше, чем слабая типизация».

Интересно отметить, что в этой же статье показано, что TypeScript менее подвержен ошибкам, чем JavaScript:

Для тех, у кого есть положительные коэффициенты, мы можем ожидать, что язык связан с прочим -пуривами, большим количеством исправлений дефектов.К таким языкам относятся C, C++, JavaScript, Objective-C, PHP и Python.Языки Clojure, Haskell, Ruby, Scala и Машинопись, у всех есть отрицательные коэффициенты, подразумевая, что эти языки реже, чем в среднем, что приводит к коммерческим коммитам.

Расширенная поддержка IDE

Опыт разработки с использованием TypeScript — значительное улучшение по сравнению с JavaScript.Компилятор TypeScript информирует среду IDE в режиме реального времени о своей обширной информации о типах.Это дает несколько важных преимуществ.Например, с помощью TypeScript вы можете безопасно выполнять рефакторинг, например переименование, по всей базе кода.Посредством завершения кода вы можете получить встроенную справку по любым функциям, которые может предложить библиотека.Больше не нужно их запоминать или искать в онлайн-справочниках.Ошибки компиляции отображаются непосредственно в IDE с помощью красной волнистой линии, пока вы заняты кодированием.В целом это позволяет добиться значительного выигрыша в производительности по сравнению с работой с JavaScript.Можно тратить больше времени на кодирование и меньше времени на отладку.

Существует широкий спектр IDE с отличной поддержкой TypeScript, например Visual Studio Code, WebStorm, Atom и Sublime.

Строгие нулевые проверки

Ошибки выполнения формы cannot read property 'x' of undefined или undefined is not a function очень часто вызваны ошибками в коде JavaScript.TypeScript «из коробки» уже снижает вероятность возникновения подобных ошибок, поскольку нельзя использовать переменную, неизвестную компилятору TypeScript (за исключением свойств any типизированные переменные).Однако все еще возможно ошибочное использование переменной, для которой установлено значение undefined.Однако с версией TypeScript 2.0 вы можете полностью устранить подобные ошибки за счет использования типов, не допускающих значения NULL.Это работает следующим образом:

При включенной строгой нулевой проверке (--strictNullChecks флаг компилятора) компилятор TypeScript не позволит undefined быть присвоено переменной, если вы явно не объявите, что она имеет тип, допускающий значение NULL.Например, let x : number = undefined приведет к ошибке компиляции.Это прекрасно согласуется с теорией типов, поскольку undefined это не число.Можно определить x быть типом суммы number и undefined чтобы исправить это: let x : number | undefined = undefined.

Если известно, что тип допускает значение NULL, то есть он относится к типу, который также может иметь значение. null или undefined, компилятор TypeScript может определить посредством анализа типов на основе потока управления, может ли ваш код безопасно использовать переменную или нет.Другими словами, когда вы проверяете, что переменная undefined через, например, if компилятор TypeScript сделает вывод, что тип в этой ветви потока управления вашего кода больше не имеет значения NULL и, следовательно, может безопасно использоваться.Вот простой пример:

let x: number | undefined;
if (x !== undefined) x += 1; // this line will compile, because x is checked.
x += 1; // this line will fail compilation, because x might be undefined.

Во время сборки соразработчик TypeScript на конференции 2016 года Андерс Хейлсберг дал подробное объяснение и демонстрацию этой функции: видео (с 44:30 до 56:30).

Сборник

Чтобы использовать TypeScript, вам нужен процесс сборки для компиляции в код JavaScript.Процесс сборки обычно занимает всего пару секунд, в зависимости, конечно, от размера вашего проекта.Компилятор TypeScript поддерживает инкрементальную компиляцию (--watch флаг компилятора), чтобы все последующие изменения можно было скомпилировать с большей скоростью.

Компилятор TypeScript может встраивать информацию об исходной карте в сгенерированные файлы .js или создавать отдельные файлы .map.Информация о карте исходного кода может использоваться утилитами отладки, такими как Chrome DevTools и другими IDE, чтобы связать строки в JavaScript со строками, которые сгенерировали их в TypeScript.Это позволяет вам устанавливать точки останова и проверять переменные во время выполнения непосредственно в коде TypeScript.Информация об исходных картах работает довольно хорошо, это было задолго до TypeScript, но отладка TypeScript, как правило, не так хороша, как при непосредственном использовании JavaScript.Возьмите this ключевое слово, например.В связи с изменением семантики this ключевое слово вокруг замыканий с ES2015, this на самом деле может существовать во время выполнения как переменная с именем _this (видеть этот ответ).Это может сбить вас с толку во время отладки, но обычно это не проблема, если вы знаете об этом или проверяете код JavaScript.Следует отметить, что у Babel точно такая же проблема.

Компилятор TypeScript может выполнять еще несколько трюков, например генерировать перехватывающий код на основе декораторы, генерация кода загрузки модулей для разных модульных систем и анализ JSX.Однако помимо компилятора Typescript вам, скорее всего, понадобится инструмент сборки.Например, если вы хотите сжать свой код, вам придется добавить для этого в процесс сборки другие инструменты.

Доступны плагины компиляции TypeScript для Веб-пакет, Глоток, хрюканье и практически любой другой инструмент сборки JavaScript.В документации TypeScript есть раздел, посвященный интеграция с инструментами сборки покрывая их всех.А линтер также доступен на случай, если вам потребуется еще больше проверки времени сборки.Существует также большое количество начальных проектов, которые помогут вам начать работу с TypeScript в сочетании с множеством других технологий, таких как Angular 2, React, Ember, SystemJS, Webpack, Gulp и т. д.

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

Поскольку TypeScript очень тесно связан с JavaScript, он обладает отличными возможностями взаимодействия, но для работы с библиотеками JavaScript в TypeScript требуется дополнительная работа. Определения TypeScript необходимы для того, чтобы компилятор TypeScript понимал, что вызовы функций типа _.groupBy или angular.copy или $.fadeOut на самом деле не являются незаконными заявлениями.Определения этих функций помещены в .d.ts файлы.

Самая простая форма, которую может принять определение, — это разрешить любое использование идентификатора.Например, при использовании Лодаш, однострочный файл определения declare var _ : any позволит вам вызвать любую функцию, которую вы хотите _, но, конечно, вы все равно можете допускать ошибки: _.foobar() будет законным вызовом TypeScript, но, конечно же, незаконным вызовом во время выполнения.Если вам нужна правильная поддержка типов и автодополнение кода, ваш файл определений должен быть более точным (см. определения лодаша для примера).

Нпм-модули которые поставляются с собственными определениями типов, автоматически понимаются компилятором TypeScript (см. документация).Практически для любой другой полупопулярной библиотеки JavaScript, которая не содержит собственных определений, кто-то уже сделал определения типов доступными через другой модуль npm.Эти модули имеют префикс «@types/» и взяты из репозитория Github под названием ОпределенноТипизировано.

Есть одно предостережение:определения типов должны соответствовать версии библиотеки, которую вы используете во время выполнения.В противном случае TypeScript может запретить вам вызывать функцию или разыменовать существующую переменную или позволить вам вызывать функцию или разыменовывать несуществующую переменную просто потому, что типы не соответствуют времени выполнения во время компиляции. .Поэтому убедитесь, что вы загружаете правильную версию определений типов для правильной версии библиотеки, которую вы используете.

Честно говоря, с этим есть небольшая сложность, и это может быть одной из причин, по которой вы не выбираете TypeScript, а вместо этого выбираете что-то вроде Babel, которое вообще не страдает от необходимости получать определения типов.С другой стороны, если вы знаете, что делаете, вы можете легко преодолеть любые проблемы, вызванные неправильными или отсутствующими файлами определений.

Преобразование из JavaScript в TypeScript

Любой .js файл можно переименовать в .ts файл и запустил компилятор TypeScript, чтобы получить синтаксически тот же код JavaScript, что и выходные данные (если он изначально был синтаксически правильным).Даже если компилятор TypeScript получит ошибку компиляции, он все равно выдаст ошибку. .js файл.Оно может даже принять .js файлы в качестве входных данных с помощью --allowJs флаг.Это позволяет вам сразу начать работу с TypeScript.К сожалению, вначале могут возникнуть ошибки компиляции.Нужно помнить, что это не останавливающие показ ошибки, к которым вы, возможно, привыкли в других компиляторах.

Ошибки компиляции, возникающие вначале при преобразовании проекта JavaScript в проект TypeScript, неизбежны по природе TypeScript.Проверка TypeScript все код для достоверности, и поэтому ему необходимо знать обо всех используемых функциях и переменных.Таким образом, определения типов должны быть определены для всех из них, иначе неизбежно возникнут ошибки компиляции.Как упоминалось в главе выше, практически для любой среды JavaScript существуют .d.ts файлы, которые можно легко получить при установке Определенно типизированные пакеты.Однако возможно, что вы использовали какую-то малоизвестную библиотеку, для которой нет определений TypeScript, или вы заполнили некоторые примитивы JavaScript.В этом случае вы должны предоставить определения типов для этих битов, чтобы ошибки компиляции исчезли.Просто создайте .d.ts файл и включите его в файл tsconfig.json files массив, чтобы он всегда учитывался компилятором TypeScript.В нем объявляем те биты, о которых TypeScript не знает, как тип. any.Устранив все ошибки, вы можете постепенно вводить текст в эти части в соответствии с вашими потребностями.

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

Самым большим препятствием является кривая обучения.Я советую вам сначала поэкспериментировать с небольшим проектом.Посмотрите, как он работает, как собирается, какие файлы использует, как настраивается, как функционирует в вашей IDE, как структурирован, какие инструменты использует и т.д.Преобразование большой базы кода JavaScript в TypeScript возможно, если вы знаете, что делаете.Прочтите этот блог, например, на конвертация 600 тысяч строк в машинописный текст за 72 часа).Просто убедитесь, что вы хорошо владеете языком, прежде чем совершать прыжок.

Принятие

TypeScript имеет открытый исходный код (лицензия Apache 2, см. GitHub) и поддерживается Microsoft. Андерс Хейлсберг, ведущий архитектор C# возглавляет проект.Это очень активный проект;Команда TypeScript выпустила много новых функций за последние несколько лет, и еще много замечательных функций планируется выпустить (см. дорожная карта).

Некоторые факты об усыновлении и популярности:

  • в Опрос разработчиков StackOverflow, 2017 г. TypeScript был самым популярным транспилятором JavaScript (9-е место в общем зачете) и занял третье место в категории самых популярных языков программирования.
  • в Обзор состояния js в 2018 году TypeScript был объявлен одним из двух крупных победителей в категории «разновидности JavaScript» (вторым стал ES6).
  • в Опрос разработчиков StackOverlow 2019 г. TypeScript поднялся на 9-е место среди самых популярных языков среди профессиональных разработчиков, обогнав C и C++.Он снова занял третье место среди самых любимых языков.

Thmyscript делает что-то похожее на то, что меньше или Sass делает для CSS.Они являются супер наборами из него, что означает, что каждый код JS, который вы пишете, является допустимым кодом Teartcript.Кроме того, вы можете использовать другие вкусности, которые он добавляет на язык, а трантпильский код будет действительным JS.Вы можете даже установить версию JS, на которую вы хотите, чтобы ваш полученный код.

В настоящее время TypeScript - это супер набор ES2015, поэтому может быть хорошим выбором, чтобы начать изучать новые функции JS и транпилировать необходимый стандарт для вашего проекта.

" Типопримечательные основы " - Плуреновой видео-курс href="https://www.pluralsight.com/authors/dan-whlin"> Дэн Валин и Джон Папа - это действительно хорошее, в настоящее время (25 марта 2016 г.) обновлено, чтобы отразить Teampcript 1.8, введение в TypeScript.

Для меня действительно хорошие особенности, рядом с приятными возможностями для Intellisense, являются классами , , модули , простота реализацииAMD и возможность использовать ShameScriptle ShameScriptle Shotscript ChideScript, при вызове IE.

Для суммирования : если используется как предназначено, TypeScript может сделать программирование JavaScript более надежным и проще.Он может значительно увеличить производительность программиста JavaScript на полном SDLC.

Скрипт ECMA 5 (ES5), который поддерживает все подкрепления браузера и предложена.ES6 / ES2015 и ES / 2016 пришли в этом году с большим количеством изменений, поэтому для всплывания этих изменений есть что-то, между которым следует позаботиться о том, что Typlections.

• Типссы - это типы -> означает, что мы должны определить DataType каждого свойства и методы.Если вы знаете, C # тогда TypeScript легко понять.

• Большое преимущество Tymdercript - это проблемы, связанные с типом, связанные с типом, прежде чем идти на производство.Это позволяет проваливать модульные тесты, если есть несоответствие типа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top