Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что думаете на счёт TypeScript? (https://javascript.ru/forum/misc/85216-chto-dumaete-na-schjot-typescript.html)

Aetae 25.05.2023 20:26

voraa, это он для C# ругается, перетыкни на ts - норм сгенерит.)

Alexandroppolus 26.05.2023 14:04

Цитата:

Сообщение от voraa
В котором, меня интересует лишь пара полей.
Сколько времени уйдет на точное описание на ts такого объекта

если тебе нужна пара полей, то достаточно описать только их
type MyType = {
    a: string;
    b: number;
};

const jsonObj = {
    a: 'aaa',
    b: 123,
    c: 456,
    d: {...}
};

function f(p: MyType) {
    console.log(p.a.toUpperCase(), p.b.toFixed()); // проверка типов, автокомплит и т.д.
}

f(jsonObj); // в параметр типа MyType передали jsonObj, где дохрена всего "лишнего"

Aetae 26.05.2023 18:02

Alexandroppolus, по секрету скажу: если совсем лень - можно прям энтот json использовать как тип. Да, вместо абстрактных string там будут конкретные значения, но если ты только читаешь и не пишешь - то тебе пофигу.)

Alexandroppolus 26.05.2023 21:33

Aetae,
Ну это если мы заимпортили json или прямо вручную создали объект-литерал. Для загруженного объекта тип будет unknown или даже any..

Aetae 27.05.2023 07:22

Alexandroppolus, это очевидно(вроде). TS работает на этапе компиляции, откуда ему знать что ты там когда-нибудь в рантайме загрузишь...

Uzasny 29.05.2023 03:01

Цитата:

Сообщение от Aetae (Сообщение 551933)
Какие тебе аргументы? Такие которые скажут, что ты - молодец и можешь дальше ничего нового не изучать, и сидеть на жопе ровно? Хрен тебе.

Я в своё время тоже возмущался и "не понимал", пока не взялся за реальный проект, так что и тебе никакие разумные доводы не помогут кроме дела. Прирост в скорости в два раза, в полёте мысли без отвлечений и загрузки в память мусора не имеющего отношения к контексту проблемы - это всё для тебя пустой звук пока не познаешь на себе.

Я думал, что программист по складу ума должен уметь приводить аргументы в виде сухих фактов - бенчей, статы и прочих цифр.

А истеричное "Родишь — поймешь попробуешь — поймёшь" - говорит не в пользу специалиста...

Цитата:

Сообщение от Aetae (Сообщение 551944)
Мусора - знаний о всех структурах, схемах и потоках данных в не релевантных частях большого приложения. Тебе не надо разбирать что-то кроме куска кода с которым ты работаешь, когда TS следит за входящими и исходящими данными за тебя.

Вот это уже лучше, появилась конкретика.

Цитата:

Сообщение от Aetae (Сообщение 551944)
Если ты топишь за ванилу, потому что главное - это скорость работы программы, а всё остальное презренно и ничтожно - пиши на ассеблере и не приставай к адекватным людям. Может быть даже закончишь за свою жизнь один какой-нибудь суперскоростной микропроект.

Как же хочется взять и обидеть таким "скорость-не-главное" продвинутым погромистам. Но увы, это уже борьба с ветряными мельницами, копроэкономика сделала своё дело. Страница входа в ЛК застройщика - сначала сожри 10 метров скриптов. Явно "продвинутые погромисты" сэкономили своё время и мозговые клетки. За счёт времени и нервов пользователей. А как пытаешься что-то с этим сделать - сразу визг "преждевременная оптимизация".

Uzasny 29.05.2023 03:10

Цитата:

Сообщение от voraa (Сообщение 551878)
Не помню, что бы когда либо передавал объект вместо строки. Может я уникум, но ошибки типизации у меня крайне редки. Не припомню, когда делал.

У меня те же мысли. Смысл загромождать код ради "спасения" от ошибок, которых у меня даже не бывает? Дешёвым недокодерам, может, и помогает, а мне - мешает. И да, я сейчас работаю с "большой кодовой базой" без тупоскриптов, о ужос. Никто не умирает. Со временем узнал проект так, что подсказки практически не нужны. Но я на одном продукте работаю. Тем, кто часто скачет по проектам, видимо, заходит.

Aetae 29.05.2023 09:36

Цитата:

Тем, кто часто скачет по проектам, видимо, заходит.
Конечно. С TS тебе буквально ничего не надо знать о проекте. Если тебе нужно поправить один файл, то тебе нужно открыть и править только один этот файл. За всё что приходит и всё что уходит отвечает тайпскрипт, тебе вообще не интересен контекст всего остального говна. Это просто кайф.
Цитата:

Как же хочется взять и обидеть таким "скорость-не-главное" продвинутым погромистам.

Если пипл хайвает, если бизнес хавает, то зачем я должен "страдать за народ"? Я прекрасно умею писать оптимизированный код, только он никому не нужен.

voraa 29.05.2023 09:47

Получается замкнутый круг. Сначала быстро пишем неоптимальный код, получая запредельные всякие FCP, LCP. Потом хватаемся за голову и тратим время, больше чем сэкономили на коде, что бы оптимизировать их.

Aetae 29.05.2023 10:16

Цитата:

Сообщение от voraa (Сообщение 552131)
Получается замкнутый круг. Сначала быстро пишем неоптимальный код, получая запредельные всякие FCP, LCP. Потом хватаемся за голову и тратим время, больше чем сэкономили на коде, что бы оптимизировать их.

Так, да не так. Мы сначала быстро пишем 100500 неоптимальных проектов, один из них выстреливает, и вот тогда - тратим время, больше чем сэкономили на коде одного, но несоизмеримо меньше чем сэкономили на всех остальных.


Ну и вообще это отхождение от темы, т.к. TS ровно никак не влияет на производительность, ибо компилируется в JS практически 1 к 1.

Вот Ангуляр и Рекат - да, влияют, ибо требуют много ручного труда для производительности, а реакт аж в документации пишет "никогда не оптимизируйте, потом когда будет узкое место там и пофиксите", что делает реакт на деле самым тормозным из всех, при вполне нормальной возможности оптимизации.:)
В Vue с оптимизацией дело куда лучше, потому что она работает по умолчанию, но кривые руки всё равно никто не отменял.)

ksa 29.05.2023 12:51

Ребята, материться не обязательно... :nono:

webgraph 29.05.2023 23:38

Цитата:

Сообщение от Aetae
тебе вообще не интересен контекст всего остального говна. Это просто кайф.

збс подход к разработке. а зачем вообще тогда создавать код?

P.S. словно описал философию Microsoft XD

webgraph 29.05.2023 23:41

Цитата:

Сообщение от Uzasny
сначала сожри 10 метров скриптов

пахахпха вот реал ! я постоянно удивляюсь, как для вещи, на которую надо пару строк кода, умудряются запихнуть миллиард!

webgraph 30.05.2023 00:02

Цитата:

Сообщение от Uzasny (Сообщение 552124)
У меня те же мысли. Смысл загромождать код ради "спасения" от ошибок, которых у меня даже не бывает? Дешёвым недокодерам, может, и помогает, а мне - мешает. И да, я сейчас работаю с "большой кодовой базой" без тупоскриптов, о ужос. Никто не умирает. Со временем узнал проект так, что подсказки практически не нужны. Но я на одном продукте работаю. Тем, кто часто скачет по проектам, видимо, заходит.

Прикол в том, что когда знакомились с TypeScript — вроде всё ясно и понятно. Но через небольшое время смотрю на код TS — и вообще не понимаю что там происходит. На участок кода нужно в голове держать несколько сущностей — разве это упрощение? Мозг просто плавится.

Это какой-то .sass или .less для .css, в которых, лично для меня, нет никакого смысла. Лишние зависимости, создающие ненужное напряжение.

Я за чистый, ясный и высокоскоростной код.

Microsoft можно понять — это корпорация, которой просто необходимо делать деньги. Вот она и клепает всё подряд и ещё потом создаёт на это тренды. Вообще грустно за этих корпораций. Столько говна делают, лишь бы хоть что-то сделать. Типа "на месте не стоим, развиваемся". Ещё постоянно преподносят это как сверхинновации.

Помню лет 10 назад на обучении делали сайты на ASP.NET ... сейчас вспоминаю и думаю — что это за треш был вообще.

webgraph 30.05.2023 00:03

Цитата:

Сообщение от ksa (Сообщение 552135)
Ребята, материться не обязательно... :nono:

ну чуть-чуть-то можно :yes:

Aetae 30.05.2023 06:31

Цитата:

Сообщение от webgraph (Сообщение 552149)
Но через небольшое время смотрю на код TS — и вообще не въёб@ваю что там происходит.

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

voraa 30.05.2023 09:01

Цитата:

Сообщение от webgraph
Microsoft можно понять — это корпорация, которой просто необходимо делать деньги.

Вопрос - как они монетизируют ts и vsc?
Цитата:

Сообщение от webgraph
Я за чистый, ясный и высокоскоростной код.

Я тоже. По мне в ts код яснее (иногда), в скорости вообще нет разницы.
Вопрос для меня только в том, что дает ts, что бы ради него стоило заморачиваться. Так часто поступают в рекламах - берут маленькую проблеку, раздувают ее в проблемищу вселенского масштаба и предлагают ее решение (создающее другие проблемы, но об этом молчат). Так же и ts. Отсутствие типизации в js раздули в проблемищу (А для многих это проблемка). Решение - ts. Но при этом часто приходится делать бессмысленные преобразования типов и необходим этап компиляции.

webgraph 30.05.2023 09:20

Цитата:

Сообщение от voraa
Вопрос - как они монетизируют ts и vsc?

Например, тем, что мы сейчас о них говорим и прямым образом рекламируем их корпорацию. И их продукцию.

webgraph 30.05.2023 09:25

Цитата:

Сообщение от voraa
в скорости вообще нет разницы

js я могу написать и запустить прямо в браузере вообще на любом сайте. У меня как-то однажды какая-то идея возникла и мне ничего более простого не пришло в голову как просто открыть консоль на этом сайте и написать js код. И сразу же получить результат. Вот это я понимаю скорость.

voraa 30.05.2023 09:32

Цитата:

Сообщение от webgraph (Сообщение 552148)
пахахпха вот реал ! я постоянно удивляюсь, как для вещи, на которую надо пару строк кода, умудряются запихнуть миллиард!

Это скорее к реакту. Да на ваниле можно использовать либы на десятки K ради пары используемых функций. С ts это вообще никак не связано.

voraa 30.05.2023 09:35

Цитата:

Сообщение от webgraph
js я могу написать и запустить прямо в браузере вообще на любом сайте.

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

Тесты, написанные на js в консоле (вообще не представляю, как там можно написать больше 5-7 строк), в код можно перенести и оформить на ts. Все равно ведь в готовый код это переносится не копипастом.

voraa 30.05.2023 09:46

Цитата:

Сообщение от webgraph
Например, тем, что мы сейчас о них говорим и прямым образом рекламируем их корпорацию. И их продукцию.

Так вот почему АвтоВАЗ делает Г! Что бы мы говорили, что это Г, и тем самым рекламировали АвтоВАЗ

webgraph 30.05.2023 10:04

Цитата:

Сообщение от voraa (Сообщение 552160)
Я же про скорость продакшн. Не только скорость выполнения, но и все остальное - время загрузки, например...

Скорость всё равно ниже. Если провести аналогию, то для JS достаточно одного "ядра" в мозге человека, чтобы обрабатывать информацию, потому что всё происходит и выполняется линейно. А для TS нужно уже несколько "ядер" и ещё несколько потоков. И оперативы в три раза больше.

function getLength<T>(arg: T): number {
    return arg.length;
}


Просто франкенштейн какой-то.

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

Например, у нас есть информация, которая в одном формате весит 1 килобайт, а во втором формате - 1 мегабайт. Вот и спрашивается - нахрена мне второй формат??

Аналогий можно бесконечно приводить.

webgraph 30.05.2023 10:05

Цитата:

Сообщение от voraa (Сообщение 552161)
Так вот почему АвтоВАЗ делает Г! Что бы мы говорили, что это Г, и тем самым рекламировали АвтоВАЗ

черный пиар - тоже пиар) XD

ksa 30.05.2023 11:27

Цитата:

Сообщение от webgraph
ну чуть-чуть-то можно

Нет.
Если еще будет мат - тему закрою.

Aetae 30.05.2023 14:46

webgraph, фигню говоришь, как обычно.

Во-первых: voraa(и все остальные) говорят про скорость исполнения результирующего кода на клиенте. И она не отличается. Не может отличаться.
Во-вторых: если говорить про скорость работы одного и того же человека с TS, против JS, то она выше, а не ниже. Если у тебя ниже, значит ты просто никогда не работал с TS, мелкие попытки потыкать - тут не играют роли.
В-третьих: в TS мне надо думать на порядок меньше, чем в JS, а освободившиеся мощности всегда можно направить на что-то более полезное.

Nexus 30.05.2023 15:54

Цитата:

Сообщение от webgraph
function getLength<T>(arg: T): number {
    return arg.length;
}

Просто франкенштейн какой-то.

Ну так generic бесполезен более, чем полностью, и код содержит ошибку.
Смотришь на это нечто и задаешься вопросом: «А что, собственно, эта хрень в ка-ве аргумента принимает?»

Переписать эту функцию, например, так и все вопросы отпадают (3 варианта на выбор):
function getLength(lengthAwareItem: { length: number }): number;
function getLength(array: unknown[]): number;
function getLength(item: unknown[] | { length: number }): number {
    return item.length;
}

voraa 30.05.2023 16:10

Цитата:

Сообщение от webgraph
А для TS нужно уже несколько "ядер" и ещё несколько потоков. И оперативы в три раза больше.

Вы видимо не совсем представляете, как это работает. Вся эта информация о типах нужна только для ts (и для IDE). В результирующем файле js будет всего одна функция. Как будто были некие вспомогательные комментарии, ts их прочел, учел для проверок все ли в порядке с типами и удалил.

Aetae 30.05.2023 16:31

Nexus, если по логике вещей удобно иметь какой-то тип, то в стандартной либе он скорее всего есть, начинай писать - IDE подскажет.)
function getLength(item: ArrayLike<unknown>): number {
  return item.length;
}

webgraph 30.05.2023 17:05

Цитата:

Сообщение от voraa (Сообщение 552182)
Вы видимо не совсем представляете, как это работает. Вся эта информация о типах нужна только для ts (и для IDE). В результирующем файле js будет всего одна функция. Как будто были некие вспомогательные комментарии, ts их прочел, учел для проверок все ли в порядке с типами и удалил.

О "ядрах" — это была аналогия... Прочитайте ещё раз полностью текст сообщения))

voraa 30.05.2023 22:56

Цитата:

Сообщение от webgraph
то для JS достаточно одного "ядра" в мозге человека,

Ну наверно в разных мозгах разное количество "ядер"

webgraph 31.05.2023 13:58

Цитата:

Сообщение от voraa (Сообщение 552191)
Ну наверно в разных мозгах разное количество "ядер"

«Ядер» во всех мозгах одинаковое. Вопрос лишь в том, что какой смысл их тратить впустую на сомнительные технологии.

webgraph 31.05.2023 15:03

Цитата:

Сообщение от Aetae
webgraph, фигню говоришь, как обычно.

Даже комментировать твоё хамство не стану. С тобой всё понятно.

webgraph 31.05.2023 15:05

Цитата:

Сообщение от Nexus
generic бесполезен более, чем полностью

Как и весь TypeScript, судя по всему)

webgraph 31.05.2023 17:02

В общем можно сделать вывод, что TypeScript актуален, когда:

1. Переходите с языков со строгой типизацией и не можете без них жить
2. Часто возникают ошибки с типизацией
3. Просто требуется и без него не берут на работу (странно)
4. Работаете над кучей разных проектов, в которые даже не вникаете (странно конечно)

Во всех остальных случаях он не актуален.

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

Назвать это прям отдельным языком программирования у меня не поднимается язык. Очевидно это сделали специально, чтобы придать вес этому фреймворку, подобному jQuery и т.д.

voraa 31.05.2023 18:03

Цитата:

Сообщение от webgraph
2. Часто возникают ошибки с типизацией

Ошибки с типизацией разные бывают
Одно дело, когда в переменную пихать то строки, то числа
Другое дело, если есть объект
obj = {a:1, b:2, c:3}
и вы вдруг ошиблись и написали
obj.A = 11;
то js это проглотит и не подавится. И ошибка потом может всплыть в самый непредсказуемый момент.
ts предупредит об ошибке, если объекту точно задан тип.
Есть и другие ситуации, когда, например, возвращаемое значение функции может быть разных типов (например null у querySelector) И ts также разумно предупредит об этом. И надо будет либо делать проверку (она действительно бывает необходима, но о ней можно просто забыть), либо убеждать ts, что я точно знаю, что null тут не будет
Ну и плюс самодокументация программы. Читать программу и понимать, что в переменной может быть и в каком типе проще, чем разбираться по коду, что в нее присвоили. Переменная может называться startDate, но по имени не скажешь, что в ней - Date, строка, целое число миллисекунд?

Меня в ts раздражает этап компиляции. Для небольшого проекта, особенно когда весь проект делаешь сам, это лишнее да и в js разобраться можно.
Ну и последующая отладка сгенерированного кода у меня вызывает трудности. Хотя может я знаю далеко не все.

Aetae 31.05.2023 19:23

Цитата:

Сообщение от voraa (Сообщение 552201)
Ну и последующая отладка сгенерированного кода у меня вызывает трудности. Хотя может я знаю далеко не все.

Компиляция генерирует сорсмапы, потому в отладчике ты видеть должен тот же ts, а не результат компиляции.

webgraph 31.05.2023 20:22

Цитата:

Сообщение от voraa
obj = {a:1, b:2, c:3}
и вы вдруг ошиблись и написали
obj.A = 11;

Во-первых, сам код нечитабельный — вместо однобуквенных обозначений следует использовать более реальные и полные слова. Из-за нечитабельных названий может много ошибок возникать.

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

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

А какую вы IDE используете?)

voraa 31.05.2023 20:31

Цитата:

Сообщение от webgraph
более реальные и полные слова

Более длинные. В них проще сделать опечатку.
Цитата:

Сообщение от webgraph
А какую вы IDE используете?)

VSC
Цитата:

Сообщение от Aetae
Компиляция генерирует сорсмапы, потому в отладчике ты видеть должен тот же ts, а не результат компиляции.

Знаю. Но когда пробовал ts что то пошло не так. Наверно не настроил, как надо. мепы не пошли, видел только js код.

webgraph 31.05.2023 22:40

Было бы реально круто использовать Solidity — там как раз прям строжайшая типизация и много всяких плюшек. Мне прям оч нравится его архитектура.


Часовой пояс GMT +3, время: 08:20.