Должен ли я использовать машинопись? или я могу просто использовать ES6? [закрыто]

286

Моя ежедневная работа - разработка клиентов с использованием AngularJS. Мы оцениваем, хотим ли мы использовать TypeScript. Я провел некоторые исследования в области машинописи, и почти во всех нужных мне пакетах JavaScript должны быть файлы определений типов. Я обнаружил, что это не очень удобно, особенно если я хотел бы попробовать что-то новое, и у них нет определения для этого. Это действительно расстраивает. (Даже текущее определение jQuery доставляет мне некоторые проблемы, если я хочу использовать бета-версию 1.5). Я начал смотреть на ES6, и он похож на TypeScript. Должен ли я просто использовать ES6 вместо этого? Кроме того, я слышал, что angular 2 будет иметь полную поддержку TypeScript, будет ли это одной из причин, почему я должен остаться с ним?

cjskywalker
источник
11
Вам не нужен файл определения каждый раз для чего-то нового. Если вы хотите использовать библиотеку без типа, вы можете написать ее, declare var MyNewLibraryName: any;используйте ее по своему усмотрению без жалоб компилятора.
Дэвид Шеррет
2
С голосами, чтобы закрыть этот вопрос, я бы предложил спросить больше плюсов / минусов, связанных с каждым подходом, а не спрашивать, что является лучшим, таким образом, вы запрашиваете информацию, а не мнения.
Brocco
typecript обновляет функцию новой версии javascript перед всеми основными браузерами, мой вариант - использовать typcript и скомпилировать в версию javascript на основе ваших целевых браузеров. (Конечно , даже легко transpile JavaScript одной версии к другой)
BHV
Если вас не беспокоит возможность корректного кодирования кода, и вы хотите, чтобы с Immutable.js было действительно сложно работать, и вы любите писать шаблон, и вы думаете, что DRY переоценен, и вы на самом деле предпочитаете повторять себя, и вы наслаждайтесь написанием определений типов для кода других людей, вам нравится управлять типами, когда они изменяются под вами, и вам нравится переключаться между двумя различными текстовыми редакторами, потому что ничего не работает должным образом, затем выберите Typescript. Но если вы в здравом уме, выберите ES6 / 7 и Babel.
зверский

Ответы:

114

Я использовал Typescript в своем текущем угловом проекте около полутора лет, и хотя время от времени возникают некоторые проблемы с определениями, а затем проект DefiniteTyped проделывает потрясающую работу, не отставая от последних версий самых популярных библиотек.

Сказав, что при переходе с ванильного JavaScript на TS есть определенная кривая обучения, вы должны учитывать способность вас и вашей команды осуществить этот переход. Кроме того, если вы собираетесь использовать angular 1.x, большинство примеров, которые вы найдете в Интернете, потребуют от вас перевести их с JS на TS, и в целом сейчас не так много ресурсов по использованию TS и angular 1.x вместе. ,

Если вы планируете использовать Angular 2, есть много примеров использования TS, и я думаю, что команда продолжит предоставлять большую часть документации в TS, но вам определенно не обязательно использовать TS для использования Angular 2.

ES6 имеет некоторые приятные функции, и я лично планирую познакомиться с ним, но я бы не стал считать его готовым к использованию языком на данном этапе. Главным образом из-за отсутствия поддержки со стороны современных браузеров. Конечно, вы можете написать свой код в ES6 и использовать транспортер для его переноса в ES5, что сейчас очень популярно.

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

Кент Купер
источник
40
ES6 не получил поддержку браузера? Вы какой-то политик MS? И для машинописи, и для ES6 нужен транспортер. Означает, что вы не используете TS или ES6 в Интернете, а используете что-то вроде Babel. TS в Angular 2 был добавлен только для политической связи между Google и MS
STEEL
40
@ STEEL Нет, не политик MS, вы просто отвечаете на ответ, который я оставил более года назад, когда поддержка ES6 была очень ограниченной. И вы можете думать, что решение TS и Angular 2 было политическим, но это не меняет моего мнения о том, что оно было написано для этого языка, и команда Angular2 поощряет его использование.
Кент Купер
18
Это было 2 года назад, но время показало, как в конечном итоге превалирует стандарт. ES6 в настоящее время поддерживается большинством браузеров. Классы, функции стрелок и т. Д. В конце концов, мы дойдем до точки, когда браузеры будут изначально поддерживать достаточно приличную версию javascript, чтобы сделать ненужными транспиляторы. Typescript всегда будет требовать транспортер. Почему это важно? потому что мы, как веб-разработчики, должны продвигать сеть вперед, поддерживая стандарты
monzonj
3
Облом ES6 не поддерживает фактическую безопасность типа "время компиляции". В ES6 есть много замечательных вещей, но тот факт, что я не могу сказать «этот аргумент является строкой (или экземпляром класса X), черт побери», и не могу проверить его как часть процесса сборки, все еще плохо для большие программы (как передний, так и задний).
Брэд Пибоди
Вы можете использовать такой инструмент, как Flow Type, чтобы добавить поддержку типов в ES6, если вы действительно этого хотите. До тех пор, пока ES6 не станет повсеместным во всех браузерах, ваш набор инструментов будет состоять из Flow-> ES6-> Babel, что является значительной косвенностью, но выполняет свою работу, и я думаю, что в настоящее время это очень популярная цепочка.
Прахлад Ери
660

Дерево решений между ES5, ES6 и TypeScript

Вы не против сделать шаг?

  • Да - использовать ES5
  • Нет - продолжай

Вы хотите использовать типы?

  • Да - использовать TypeScript
  • Нет - использовать ES6

Подробнее

ES5 - это JavaScript, который вы знаете и используете в браузере сегодня, он такой, какой он есть, и не требует этапа сборки, чтобы превратить его в нечто, что будет работать в современных браузерах

ES6 (также называемый ES2015 ) - это следующая итерация JavaScript, но она не работает в современных браузерах. Существует довольно много транспортеров, которые экспортируют ES5 для работы в браузерах. Это все еще динамический (читай: нетипизированный) язык.

TypeScript предоставляет опциональную систему набора текста, одновременно используя функции из будущих версий JavaScript (ES6 и ES7).

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

Brocco
источник
5
Это не так просто. Есть много других факторов.
RaoulRubin
16
@RaoulRubin Это правда, есть много других факторов, но для закрытого вопроса здесь, по крайней мере, это является отправной точкой для процесса принятия решений
Brocco
1
PS - ES6 + FlowType = Love :)
Red2678
3
У @RavinderPayal интересный вопрос, Брокко. С рыночной точки зрения, то , что это значение TS против ES5 или ES6 и прочего вдоль этих линий?
J.Wells
3
Итак, этому посту пара лет /. Давайте перенесемся на 28 сентября 2017 года. Поддерживают ли большинство браузеров ES6?
Дьюи Бэнкс