LINUX.ORG.RU

Typescript, как ведущая технология.

 , ,


0

3

Встал вопрос выбора технологий под новый проект.

Накидайте плюсов typescript, господа, владеющие данным ЯП.
Сам пока насмотрелся дивных косяков и неприятных моментов:

1 Не нужен без IDE. В редакторых без обвеса бесмыссленно на нём писать. Предлагаемый VSCode тырит всё, к чему может дотянуться (прописано в лицензии и в требованиях к дополнениям)
2 Прямо из документации: Null и его весёлые проблемы, простой тип Boolean, точно Вам говорю! Ссылки на «нормально». Да весь раздел по ссылке весёлый.
3 Это надо разбираться и уметь, а те, кто клепает на React/Vue, да и просто большинство - не знают, как вообще работает JS или ИХ выбранный framework, куда им до выведения типов, сложно, короче.
4 Всегда стремает MS. Сколько я с ней не работал, везде отношение " пользователь - не человек".

А так, если на этот список закрыть глаза, очень здравая идея.



Последнее исправление: Neuromagus (всего исправлений: 3)

Большинство странностей TS проистекают из природы JS, типы данных которого он пытается описать. Это в JS есть 2 вида пустого значения (null и undefined), это в JS есть не всегда логичные автоматические приведения типов (привет, '10'-1=9). А TS просто позволяет описать, что же твои функции ожидают и что возвращают. Чтобы случилась ошибка компиляции вместо неадекватного поведения в рантайме. Кстати, технически он позволяет везде пихать any и забить на типы. Либо включить опцию noImplicitAny: false в конфиге и мигрировать на compile-time типизацию инкрементально. Фактически это надмножество JS.

А ещё TS позволяет отличать хороших JS мидлов/сенсоров от джунов. Если человек не понимает зачем нужен TS, значит на JS ничего серьёзнее Hello world он не писал, можно сразу звать на собеседование следующего кандидата.

Касательно VSCode, телеметрия там отключается в настройках. А ещё он OpenSource.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от KivApple

Касательно VSCode, телеметрия там отключается в настройках.

Только кусок.

Большинство странностей TS проистекают из природы JS

Никто не спорит. Но если надо проверять после типа, то не особо понятно, зачем нужен TS?

Neuromagus
() автор топика

1. Статическая типизация и всё что к ней прилагается. Проверки на этапе компиляции, нормальная интеграция с ide и пр.

2. Непрототипное наследование и вообще нормальные классы.

3. Если есть бекграунд на java/c#, проще переходить на ts, чем на js. Но это роляет, если у тебя есть готовая команда.

По своему опыту двумя руками за ts, обмазываться или нет фреймворками - дело вкуса, но сам язык значительно удобнее.

hippi90 ★★★★★
()
Ответ на: комментарий от Neuromagus

Где нужно проверять?

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

Проверка типов самим программистом нужна либо когда нас вызывает сторонний код, либо если мы явно прописали тип any или несколько возможных типов.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

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

Если я тебе даже ссылки привёл, то это не значит, что ты ‘Ъ’, ты просто плаваешь, жалко. Ну давай разберём тот же Boolean. Что в JS true и false? Мы же сужаем всё к типам? Ну давай по минимуму. А потом давай пройдёмся по Null.

Neuromagus
() автор топика
Ответ на: комментарий от no-such-file

В общем и целом ненужный гемор.

Не знаю, не знаю. Идея очень здравая, да реализация хромает. Как по мне, чтобы на TS годно писать, нужно очень и очень быть компетентным как в JS, так и знать что-то о Haskell.

Neuromagus
() автор топика
Ответ на: комментарий от ugoday

Это значит, что новые технологии пока сырые: Eglot лучше всех, но страдает с автодополнением (completions-at-point). Tree-sitter - это вообще отдельная тема (treesit-font-lock-level). Там очень много сделано и очень много предстоит. Когда доделают, ИМХО, очень много кода уйдёт в небытиё и получится всё по новому формату.

Neuromagus
() автор топика
Ответ на: комментарий от Neuromagus

Прошёл по первой ссылке. Там проверка типа используется как раз потому что функция принимает несколько типов аргументов в рантайме.

В такой ситуации приходится извращаться с чисто джавоскриптовским подходом. typeof это конструкция из JS и TS ничего к ней не добавляет, а переводит 1 в 1 в JS. Хотя всё равно сможет отследить часть ошибок (в кейсах где typeof даёт какие-то гарантии).

Надо понимать, что код на TS при компиляции превращается в код на JS. И не считая некоторого сахара (типа тех же классов, optional chain и т. д. - кстати, эти фичи постепенно перетекают в JS) превращается 1 в 1, просто удалением аннотаций. Но TS выполняет статический анализ корректности кода в плане типов (а вот это в JS пока не перетекает).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 4)
Ответ на: комментарий от KivApple

Так. Что у JS false? А null? А почему потом даже с описанием ошибки? Ну давай цитату брошу:

But it turns out that in JavaScript, typeof null is actually «object»! This is one of those unfortunate accidents of history.

Добавлю, что функция в JS тоже объект ;)

Получается, что верить нельзя, надо доп. проверки (и несколько раз), чтобы убрать нетривиальное поведение JS. Типы тут не спасают.

Neuromagus
() автор топика
Ответ на: комментарий от th3m3

Ну а вчём он не прав? Зонд — это норма в этой цивилизации.
Борьба с зондами — дурка. Это как писать против ветра.
Да, ты бунтарь, ты свободен, но придётся очень сильно напрягаться, сил на другое(освоение новых фреймворков) не хватит.

Bad_ptr ★★★★★
()
Ответ на: комментарий от Neuromagus

В чём напряг? Есть vim/nvim, есть Emacs.

из вима даже выйти — напряг
емакс настраивать — напряг

те, кто не освоил

(а зачем)
живут и в ус не дуют и никакие зонды их не убили

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Нефига это не норма. Мало того, что vscode - это кусок говна, дак ещё и следит, тырит код. Будто других редакторов нормальных нет. Других вариантов - вагон и маленькая тележка. Использовать этот зонд - ничем не оправдано.

th3m3 ★★★★★
()
Ответ на: комментарий от Neuromagus

интересен опыт тех, кто писал или пишет на TS.

не писАл, но это очередная мегатехнология от учёного мужа, «курируемая» некрософтом… а это значит адЪ и израиль.

mrjaggers
()
Ответ на: комментарий от Neuromagus

А те, кто не освоил, тем да, как лопатой по голове без их IDE.

Ну посмотрю я на тебя, как ты будешь рефачить проект на пару сотен файлов Laravel’я в Vim. И заработает ли оно потом.

Я не спорю, что можно писать хоть в тетрадке ручкой. Только IDE в этом плане очень сильно упрощает жизнь. А в современных реалиях время стоит дороже, чем все остальное. Никто не будет ждать, пока ты там в блокноте вручную что-то накалякаешь в пафосом и гордо поднятой головой.

Zhbert ★★★★★
()
Ответ на: комментарий от th3m3

Нефига это не норма

Как минимум статистическая норма.

Автокомплиты там тоже работают лучше чем во всяких вимах/емаксах (это при условии сколько лет разрабатывали эти вимоэмаксы, а вскод слабали в сжатые сроки и он их уделал).

Будто других редакторов нормальных нет. Других вариантов - вагон и маленькая тележка.

Ну если больше делать нечего, то можно и другие редакторы полировать сидеть, и всё равно до вскода не дотянет.

Использовать этот зонд - ничем не оправдано.

Да. «Все вокруг лохи, один я догадался 10летиями конфиг вима полировать.»

Bad_ptr ★★★★★
()
Ответ на: комментарий от Zhbert

рефачить проект на пару сотен файлов Laravel’я

Ни о чём, можно хоть в ворде это делать. Однако, как-то измельчали синьоры, раньше помню понтовались прожэктами с миллионом классов, не меньше.

bread
()
Ответ на: комментарий от Bad_ptr

Как минимум статистическая норма.

Да где? В компаниях, которые заботятся о безопасности - вообще запрещают такое юзать. А если индивидуально, то тоже нужно головой думать - на чём сидишь, что юзаешь.

А тут всё и так ясно понятно - следит, тырит, но нет - будем пользоваться. Ничего что память жрёт тоннами, тормозит, сливает.

Это просто идеальный пример Стокгольмского синдрома.

th3m3 ★★★★★
()
Ответ на: комментарий от th3m3

Принёс нужный момент для дальнейшего обсуждения.

Сбор данных. Программное обеспечение может собирать сведения о Вас и об использовании Вами программного обеспечения и передавать затем эти сведения в корпорацию Microsoft. Корпорация Microsoft может использовать ее для предоставления услуг и улучшения своих продуктов и служб. Вы можете отказаться от многих из этих сценариев (но не от всех), как описано в документации к продукту, с которой можно ознакомиться по адресу: https://code.visualstudio.com/docs/supporting/faq#_how-to-disable-telemetry-reporting. В этом программном обеспечении могут также содержаться некоторые функции, которые могут позволить вам и Microsoft собирать данные у пользователей ваших приложений. Если вы используете эти функции, вы должны соблюдать применимое право, в том числе предоставлять соответствующие уведомления пользователям ваших приложений, а также заявление о конфиденциальности Microsoft. Наше заявление о конфиденциальности представлено на странице https://go.microsoft.com/fwlink/?LinkID=824704. Дополнительные сведения о сборе и использовании данных см. в справочной документации и нашем заявлении о конфиденциальности. Использование вами данного программного обеспечения означает ваше согласие с этими принципами.

И правда.

В VSCodium, говорят, все то выпилено. Но я хз, насколько оно юзабельно и работают ли там все плагины.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Я не спорю, что можно писать хоть в тетрадке ручкой. Только IDE в этом плане очень сильно упрощает жизнь. А в современных реалиях время стоит дороже, чем все остальное. Никто не будет ждать, пока ты там в блокноте вручную что-то накалякаешь в пафосом и гордо поднятой головой.

Я не спорю, что надо тратить время на обучение. Vim с CoC - супер, Emacs с LSP/Eglot - супер.

Neuromagus
() автор топика

Если собираешься писать что-то крупнее landing page, то между этими двумя - Typescript.

Как тебе объяснили выше, практически все странности Typescript это на самом деле странности JS, о которых ты просто раньше не задумывался.

Конкретно по твоим пунктам:

1 Не нужен без IDE. В редакторых без обвеса бесмыссленно на нём писать.

Разработка без IDE не нужна сама по себе, если только у тебя не почасовая ставка и заказчик готов на любые сроки. Поэтому пункт бессмысленный.

2 Прямо из документации: Null и его весёлые проблемы, простой тип Boolean, точно Вам говорю! Ссылки на «нормально». Да весь раздел по ссылке весёлый.

Всё перечисленное это Javascript, TS тут вообще ничего не изобретает.

3 Это надо разбираться и уметь, а те, кто клепает на React/Vue, да и просто большинство - не знают, как вообще работает JS или ИХ выбранный framework, куда им до выведения типов, сложно, короче.

Здесь соглашусь, а также добавлю, что Typescript в целом довольно долго изучать, так как в нём банально много всего-чего. Поэтому твоей команде придётся потратить немало времени, чтобы выучить все возможности включая последние версии языка. С другой стороны, кривая обучения у него довольно ровная, можно начинать писать код изучив основы, и доучиваться в процессе. Also, не надо пытаться прописывать типы абсолютно всему, нужно знать, когда ставить any.

4 Всегда стремает MS. Сколько я с ней не работал, везде отношение " пользователь - не человек".

Любить или ненавидеть МС - твоё личное дело, но скажу, что Typescript это одно из наиболее человечных творений МС.

runtime ★★★★
()
Последнее исправление: runtime (всего исправлений: 1)
Ответ на: комментарий от Neuromagus

Получается, что верить нельзя, надо доп. проверки (и несколько раз)

Не надо там никаких дополнительный проверок, нужно сразу проверять то, что ты хочешь:

if (Array.isArray(strs)) {
    // strs is string[] here
    for (const s of strs) {
        console.log(s);
    }
}

Тебе там учебный пример привели, чтобы ты понял, как оно работает, а ты думаешь, что это production quality код.

Если не хватает встроенных проверок, всегда можно написать свой type guard:

function myStuff(x: any): x is Stuff {
  // do your checks here, return boolean
  return true;
}
runtime ★★★★
()
Последнее исправление: runtime (всего исправлений: 2)