Возможно ли изучение Typescript как самостоятельного языка программирования?
Здравствуйте,
Я довольно свободно пишу на JS, при этом объективно понимаю, что довольно плохо знаю "подкопотное" пространство языка, разумеется, какие-то краеугольные концепции JS вроде замыканий и колбэков мне известны и понятны, но вместе с тем я осознаю, что должен уделить значительное время более глубокому изучению языка, на котором пишу. Т.к. сейчас многие вещи я пишу на интуиции или просто знаю из опыта, что оно будет работать именно так, но почему оно работает именно так мне понятно не до конца. Также в ближайшее время я планирую плавно переходить на TS. В связи с этим у меня появился вопрос к опытным товарищам, кто уже некоторое время пишет на TS. Возможно ли изучение TS как самостоятельного языка, полностью абстрагируясь от JS и его "подкапотных перипетий" или все-таки мы держим в уме, что это только надстройка и базис в виде JS должен быть досконально понят и осмыслен?
У TS есть хэндбук прекрасный, а лучшие практики это просмотр сурс кода. Насчет интерпретации, TS - надстройка, хоть и заставляет писать немного "по-новому", знать все основные концепции необходимо. Однако, копаться внутри легаси необходимости нет. Т.е. для качественного кода про прототипы и все остальное "мёртвое" нужно только иметь поверхностные знания. По необходимости - разберётесь.
Israfil22, спасибо за Ваш ответ! Возможно, он сэкономил мне очень много времени. Можете в двух словах рассказать как переходили на ТС и с какими сложностями столкнулись?
Возможно ли изучение TS как самостоятельного языка, полностью абстрагируясь от JS
Это несколько странный вопрос, учитывая что ТС транспилируется в жс.
Понятное дело, что копаться в своих транспилируемых файлах ты вряд ли будешь, поскольку в этом нет смысла, но любой пекедж ─ это в любом случае жс, а если был написан на тс, то ещё и .d.ts файлы, то есть понимать что во всех этих файлах находится бывает крайне полезно.
RaulDuke, до сих пор перехожу)
В TS можно писать очень извращенные штуки, которые очень часто люди и используют.
Самая большая проблема это и есть типизация.
В общем-то TS немного заставляет писать более стройный код, это хорошо. Но далеко не каждый пакет имеет эти типы, а те которые изначально не были написаны с их помощью напоминают сущий ад при интеграции с TS.
Проще говоря - люди привыкли что можно писать по-Васянски, а потом добавляется отдельный офф пакет с типами и начинается натягивание совы на глобус.
Моки в Jest - болезнь, я не нашёл метода правильной работы. Быть может я глуп, но материала реально мало при условии популярности TS.
TypeORM entities - работают на декораторах (декораторы концептуально потрясающая вещь), но из-за типизации иногда встречаются очень болезненные штуки. Например, невозможность без костылей создать таблицу с динамически изменяемым названием.
И самое неприятное - дикий оверхед. Если выбираете инструменты, не поддерживающие TS - еще больше.
Ну например, вышеупомянутый TypeORM один из немногих, кто даст Вам качественную полную поддержку типов среди многих известных пакетов (стат анализатор, которого мы все и ждем и любим).
Среди валидации данных AJV - полная, очень хорошая поддержка TS.
А вот например Joi и другие - жуткое извращение, придется переписывать одно и то же по миллиону раз:
типы, схемы интерфейсы, без единого стандарта объявления, без стат. анализа ( мы в TS и пытаемся этого избежать а тут снова, только в другом месте .....).
В целом - готовьтесь, что выбор пакетов становится меньше, а выбор будет более тщательный.
Как только сможете окружить себя и настроить свои привычные инструменты работы - начнете получать удовольствие. Например бэкенд, я сейчас уже не пишу без TS совсем, не представляю как это возможно.
WbICHA, с автомоками вышла проблема. Интеграции с типами нормальной не нашёл. Либо я не нашёл нужный дженерик, либо что-то с типами не клеилось. Последний раз пытался месяц четыре назад, так что не скажу, в чем именно была проблема.
Возможно ли изучение Typescript как самостоятельного языка программирования?
Да, вполне. Это вполне самостоятельный язык, да, он компилируется в js, но это не мешает ему быть самостоятельным языком. Совсем не обязательно, что вам придется разбираться c js в процессе работы, но если придется, то лучше сперва изучить адекватную реализацию на ts, а потому уже смотреть неадекватную на js.
Спасибо! Вы были очень убедительны в диалоге с Иваном Шумовым, а также, возможно, один из немногих кто понял вопрос. При ближайшем рассмотрении меня отпугнул ТС, просто потому что это не тоже самое как c es5 перейти на es6. Вы могли бы рассказать как переходили на ТС и с какими сложностями столкнулись?
RaulDuke, тот диалог не совсем про ваш вопрос, я говорил больше о фундаментальном понимании языка. Да, вы можете изучать ts как отдельный язык, но это не значит, что js выкинули и забыли, под капотом js и разумеется функции js никуда не исчезли и вы их можете изучать по js-учебнику, если вы про это. Но функции и операторы - это мелочи, их и изучать не нужно, просто находить нужные по мере необходимости (тут по принципу все сделано до нас, либо во встроенных функциях, либо во внешних, либо в готовом ПО). А вот типы, ООП, все самое интересное, это все свое в ts. Но это лишь мой субъективный взгляд, возможно у кого-то найдутся аргументы против.
Спасибо за Ваше участие, ожидал чуть более развёрнутого ответа.
TS не отдельный язык.
Да, я знаю. Вопрос состоял в том, что можно ли при изучении TS абстрагироваться от JS и нужно ли разбираться во всём этом "наследии", которое длинным хвостом тащится за джаваскриптом.
RaulDuke, это не наследие, а язык. TS это только обертка и самостоятельной реализации не имеет. Просто добавляет несколько синтаксических конструкций. Встает вопрос - можно ли выучить десяток синтаксических конструкций, которые ДОБАВЛЯЮТ возможностей ИСХОДНОМУ языку, НЕ ЗАМЕНЯЯ его?)
это не наследие, а язык. TS это только обертка и самостоятельной реализации не имеет. Просто добавляет несколько синтаксических конструкций. Встает вопрос - можно ли выучить десяток синтаксических конструкций, которые ДОБАВЛЯЮТ возможностей ИСХОДНОМУ языку, НЕ ЗАМЕНЯЯ его?)
TS - не обертка, а самостоятельный язык, со статическими явными типами, нормальными классами, контролем за этими типами компилятором, а не в рантайме, и еще много с чем, а не с десятком синтаксических сахаров. Что подразумевается под "самостоятельной реализаций" вообще неизвестно, но могу заметить, что ни один язык программирования не исполняется процессором (хотя это вообще не важно).
Поэтому на ваш вопрос можно ответить так: "можно, но не нужно".
Иван Шумов, и? Там же, самая первая фраза которую вы проигнорировали в "What is TypeScript?":
TypeScript is an open-source language
Так что вы не "один читаете первоисточники", а подстраиваете их под себя.
И да, все что там указано верно, но не отменяет что это язык программирования. В языках программирования действительно существуют различные "обертки", например фреймворки, специализирующие язык на определенных вещах. Но, здесь, идет смена самого языкового подхода, того, что зашивается в ядро языка. И эти изменения не синтаксический сахар, как вам показалось, а принципиально другой подход.
Я правильно понимаю, что вы признаете что ваши аргументы из первого комментария ошибочны, раз бросились искать новые?
Vitsliputsli, Нет) TS это по сути препроцессор в JS. Есть несколько опий его препроцессить. отдельным языков TS не является по тому что не имеет собственной языковой структуры, своего синтаксиса. TS это именно расширение JS кто бы что бы там ни говорил. Более того, документация TS сама говорит что сначала мы учим конструкции JS
Иван Шумов, TS во многом совпадает с JS, поэтому изучая одно изучаешь другое.
отдельным языков TS не является по тому что не имеет собственной языковой структуры, своего синтаксиса
Это как "самостоятельная реализация" из прошлых комментов, звучит красиво, но что это конкретно значит в вашем понимании?
Ок, давайте назовем это препроцессор. Во многих языках трансляция и компиляция называется препроцессинг. Многие языки имеют множество стадий, прежде чем будет получен машинный код, и это все дико интересно, но мы про языки программирования, а не про эти этапы говорим. А в языках важно как они реализуют методологии и парадигмы (ООП, функциональное, процедурное, обобщенное программирование), как работают с типами, что проверяется на этапе компиляции, а что в рантайме, и прочие вещи, которые характеризуют сам язык. Именно это формирует ядро языка и позволяет ему быть тем или иным языком, а синтаксис, который вы так упорно упоминаете, всего лишь "обертка", и она зачастую очень схожа в языках определенных групп. Именно по этой причине, TypeScript - это язык программирования, а то что он компилируется в js - это лишь следствие монополии js.
С точки зрения системного администратора, компилится в js - значит js, я это могу понять, но с точки зрения программиста все выглядит не так, и этот нюанс компиляция в js, не выглядит для него столь важным.
Забавно видеть, как вы кидаетесь к новым аргументам, даже не пытаясь отстоять заявленные ранее. У вас что, всегда так получалось убеждать других? Говорить много красивых слов и вам поверят?
Vitsliputsli, TS это препроцессор, да. TS не появляется в рантайме, как и еще несколько подобных "языков". Так что самостоятельным языком не является.
Напомню что такое язык программирования, на всякий случай:
A programming language is a formal language comprising a set of instructions that produce various kinds of output.
Язы́к программи́рования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель под её управлением
И поскольку инструкции в TS есть 2х типов:
- наследованные от JS (исполняемые в рантайме JS)
- собственные (не исполняемые в рантайме, а компилируемые в JS и уже новые инструкции исполняются в рантайме JS)
Напомню что такое язык программирования, на всякий случай:
A programming language is a formal language comprising a set of instructions that produce various kinds of output.
Язы́к программи́рования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель под её управлением
И поскольку инструкции в TS есть 2х типов:
- наследованные от JS (исполняемые в рантайме JS)
- собственные (не исполняемые в рантайме, а компилируемые в JS и уже новые инструкции исполняются в рантайме JS)
То TS не является языком программирования.
Ну да, действительно. Java и PHP компилятся в байт-код и в рантайме исполняется именно он, следовательно не являются языками программирования. Ах, да, Си, C++ компилятся в машинный код и в рантайме исполняется именно он, следовательно по такой логике тоже не являются языками программирования.
Т.е. приведенное определение говорит совсем о другом, а не то что пытаетесь в него впихнуть. Оно говорит о записи действий, которые будут выполнены исполнителем, и ни слова не говорит в каком виде исполнитель принимает эти команды и как они будут преобразовываться по пути к нему. А на первом месте стоит это: "набор лексических, синтаксических и семантических правил", о чем я и писал выше.
Vitsliputsli, процессор вообще ничего кроме байт-кода обрабатывать не умеет, но сам по себе байт-код ничего осмысленно оне производит) Но в отличии от TS, другие языки компилируются или интерпретируются в него. TS же преобразуется в JS.
процессор вообще ничего кроме байт-кода обрабатывать не умеет, но сам по себе байт-код ничего осмысленно оне производит) Но в отличии от TS, другие языки компилируются или интерпретируются в него. TS же преобразуется в JS.
Прочитайте что такое байт-код, вы похоже не в курсе что это. Поэтому весь этот комментарий бессмысленен.
Ну и так еще, для размышлений, проблема в том, что вы говорите языки программирования, а подразумеваете интерпретаторы и компиляторы.
Представьте такую картину, весь мир отказывается от запуска на беке PHP и переходит на nodejs. PHP перестает поддерживаться и его интерпретаторы полностью исчезают, везде nodejs. Для поддержки старого софта на PHP делают компиляторы php в js, продолжают поддерживать код на php, но компилят его в js.
По вашей логике в этот момент php перестает быть языком. Но не кажется ли вам это странным вчера еще был языком, а сегодня нет?
TS добавляет строгости к JS и не более. Всё так же можно описать и на JS. Кстати, на node.js он просто компилится в JS и только в компайл тайме в основном полезен. В deno.land кажется иначе дело обстоит но оно менее удобно чем нода.. Лучше Java сразу пробовать я думаю т.к. после него и TS будет очевиден и "самостоятельный язык" постигните
Достаточно научиться указывать интерфейсы и впринципе за месяц спокойно можно на него пересесть. Иногда только может мозги делать, но впринципе даже удобнее на нём, ошибки потенциальные сразу находит, и автодополнение удобное