В чем превосходство Typescript?

Чем оправдывается усложнение процесса написания кода(ожидание компиляции, TSLint в VSCode прям жутко тугой. Увидел недавно гайд про ускорение линта с 13сек+ до 5сек. За 5 сек быстрее ошибку в консоли отловить. Уже не говоря что работает через раз)?
Типы? Есть JSDOC. Всякие conditional chaining и классы? JS это уже давно умеет. Попробовал написать на нем небольшой сервак для MEVN стека - количество строк описания типов оказалось чуть меньше количества строк основного кода. Плюс гемор с типами не ушел - т.к. многие библиотеки nodejs не имеют типов, надо вручную писать - а это еще тот гемор.
Поддержка браузерами скомпилированного кода? Да какбы почти весь JS имеет поддержку 95%+, тот же Babel уже забыл когда использовал.
При этом вижу много вакансий, где все же требуется опыт в TS.
  • Вопрос задан
  • 1171 просмотр
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Как бы это странно не звучало, но одно из главных преимуществ TypeScript - это ускорение разработки в несколько раз. Да, когда еще ничего нет - разработка незначительно замедлится, так как помимо логики нужно описать еще и типы. Но это только в начале. И это не только возможность писать большую часть кода с помощью автодополнения. Поддержка существующего кода занимает в десятки раз больше времени, чем его начальное написание. Стоит ли вложить несколько лишних часов на старте, чтоб сэкономить в последствии месяцы? Как по мне стоит.

Еще одним огромным плюсом является возможность проектировать на типах. Познав дзен TypeScript'а я перестал пользоваться UML, так как типы дают мне ту же наглядность, но при этом еще и сокращают время, так как типы - это уже код. Ну и источник правды остается один. Бизнес требования выраженные в типах не дают отклонится от них при написании логики, исключая возможность неправильной трактовки задачи. Перенеся задачу в типы, я могу обсудить ее с коллегами и исправить неточности еще до написания кода, что опять же сильно экономит время.

Ну и отвчечу на некоторые Ваши сомнения:
TSLint в VSCode прям жутко тугой
TSLint официально deprecated, вместо него стоит использовать плагин к eslint, заодно можете мой конфиг попробовать.

Типы? Есть JSDOC
JSDoc в плане типов не умеет и 10% того, что умеет TypeScript. Кроме того, никто в здравом уме не пишет JSDoc на приватную логику, а значит проверки типов там не будет. JSDoc не гарантирует корректность рефакторинга, а вот благодаря TypeScript я, опять таки, точно не забуду обновить JSDoc.

многие библиотеки nodejs не имеют типов
может лет 5 назад так и было, но сейчас встретить библиотеку без типов - скорее исключение. Если библиотека популярная, но не предоставляет типов, скорее всего их уже написал кто-то другой, достаточно просто установить одноименный модуль из npm скоупа types и все будет работать само.

Поддержка браузерами скомпилированного кода? Да какбы почти весь JS имеет поддержку 95%+, тот же Babel уже забыл когда использовал.
Вообще это не основная задача компилятора TypeScript, а опциональная возможность. И babel + preset-env с ней справляются гораздо лучше. И никто не мешает использовать их вместе. А еще думаю вопрос времени, когда кто-то напишет оптимизатор кода использующий информацию о типах из TS.

Примерно в каждой второй есть инстансы, на которые смотришь - и чешешь репу - а как называется тип этой переменной в @types/?
import {someObject} from 'some-library';

type TypeFromValue = typeof someObject;
const valueCopy: TypeFromValue = {
    ...someObject,
    type: 'overrides',
    with: 'type check',
};
и кстати, вот пример того что JSDoc типы не умеют.

//@ts-check
и почти везде останется бесполезный any.

P.S. удачи такие типы на JSDoc описывать
P.P.S. Еще прелести современного TypeScript невозможные у...
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Типы? Есть JSDOC.

Именно Типы.
  1. Система типов у TypeScript по возможностям превосходит JSDOC.
  2. Много инструментов для автоматической проверки типов. JSDOC поменьше.


Это такой более строгий предохранитель от того чтобы не выстрелить себе в ногу. Можете воспринимать это как навороченный линтер, который проверяет не форматирование кода, сколько логику его работы.
Ответ написан
xPomaHx
@xPomaHx
1vs9
Ts для людей для которых js не является первым, у тех кто начинал с него, проблем которые решает ts не возникает, просто другой способ мышления и соответственно работы с кодом. Но таких людей полно и ts соответствен популярен, и уметь с ним работать обязательный скил.
Ответ написан
Комментировать
@Rerurk
В "не хер засовывать ЭТО туда, ОНО не для Етттого "
Ответ написан
tundramani
@tundramani
Есть такой тип особо одаренных людей которые "могут выстрелить себе в ногу".
Это настолько ужасно что лучше не писать на чистом языке и всем дополнительно страдать.
Чтобы было меньше проблем надо больше страдать.

То есть невозможно просто на js писать качественно, особенно если ты криворукий.

И ещё некоторые люди не понимают что комплект js css html php sqlite - это готовый простой прекрасный фреймворк, и чтобы сделать работу ещё проще они изобретают дополнительно в 10 раз больше инструментов.

Мир давно сошел с ума - это очевидно.
Веб-программисты забыли про священный принцип KISS

про динамическую типизацию Алан Кэй сказал:

Позднее связывание позволяет с меньшими усилиями встраивать в проект идеи, которые возникли позже в процессе разработки (по сравнению с системами с более ранним связыванием вроде C, C++, Java, и пр.)

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

Я не против типов, но мне не знакома ни одна система типов, которая не вызывала бы боли. Так что мне все еще нравится динамическая типизация.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы