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

webgraph 17.05.2023 02:49

Что думаете на счёт TypeScript?
 
Мне нравится JS и меня несколько смущает его младший братец TS. Не понимаю зачем нужна та избыточная функциональность, которая делает код сложнее и менее читабельным.

Будущее за TS? Что думаете на этот счёт?)

Alexandroppolus 17.05.2023 12:33

Цитата:

Сообщение от webgraph
Будущее за TS?

да и настоящее тоже. В "большом фронте" без него вообще никак

Nexus 17.05.2023 14:02

Маленькие проекты еще можно на js писать, но средние проекты я бы реализовывал на ts. Что собственно и делаю.

Aetae 17.05.2023 16:37

webgraph, пока не попробуешь по-серьёзному - не поймёшь(по себе сужу), напиши на нём какой-нить проект и все вопросы отпадут.)

В интернете много всякого бла-бла-бла, но на самом деле реальных преимущества два и они ультимативны:
1. Подсказки IDE становится максимально чёткими и удобными.
2. Ты не сможешь сделать мелких тупых ошибок типа опечаток, передачи объекта вместо строки и т.п.

Эти два пункта ускоряют разработку на 90%, при потерях на типизацию менее 10%. :)

voraa 17.05.2023 17:01

Ну с опечатками так.
Не помню, что бы когда либо передавал объект вместо строки. Может я уникум, но ошибки типизации у меня крайне редки. Не припомню, когда делал.
Серьезно на TS особо ничего не делал. Так, робкие попытки. Но сразу задолбался с типизацией при работе с DOM. И бросил.

webgraph 17.05.2023 17:15

Цитата:

Сообщение от Alexandroppolus (Сообщение 551873)
да и настоящее тоже. В "большом фронте" без него вообще никак

Ну а где факты, аргументы? Что значит вообще никак?

webgraph 17.05.2023 17:17

Цитата:

Сообщение от Aetae (Сообщение 551877)
webgraph, пока не попробуешь по-серьёзному - не поймёшь(по себе сужу), напиши на нём какой-нить проект и все вопросы отпадут.)

В интернете много всякого бла-бла-бла, но на самом деле реальных преимущества два и они ультимативны:
1. Подсказки IDE становится максимально чёткими и удобными.
2. Ты не сможешь сделать мелких тупых ошибок типа опечаток, передачи объекта вместо строки и т.п.

Эти два пункта ускоряют разработку на 90%, при потерях на типизацию менее 10%. :)

Вообще не понимаю как могут быть ошибки типизации. Подсказки IDE и без этого максимально четкие и удобные.

Есть какие-то другие аргументы?

ksa 17.05.2023 17:19

Цитата:

Сообщение от webgraph
Что значит вообще никак?

Ну не получается у них без TS... Про то и пишут. :)

webgraph 17.05.2023 17:22

Цитата:

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

Вот вот. И я о том же.

Плюс тот факт, что по итогу код TS компилируется в JS — это вообще как-то даже странно.

webgraph 17.05.2023 17:22

Цитата:

Сообщение от Nexus (Сообщение 551874)
Маленькие проекты еще можно на js писать, но средние проекты я бы реализовывал на ts. Что собственно и делаю.

Так а почему? В чем конкретно преимущество?

webgraph 17.05.2023 17:24

Цитата:

Сообщение от ksa (Сообщение 551881)
Ну не получается у них без TS... Про то и пишут. :)

Как может не получаться? если по итогу TS компилируется в JS

ksa 17.05.2023 17:28

Цитата:

Сообщение от webgraph
Как может не получаться?

Очень просто.
Начинают писать... Делают кучу опечаток... Передают аргументы абы как... Потом не могут все это поправить.


Тут как бы еще с размерами проектов определиться
- маленький
- средний
- большой
Как измерять? :D

Например 10 человек разрабатывали что-то 1 год... Это какой размер?

Nexus 17.05.2023 17:50

Цитата:

Сообщение от webgraph
Так а почему? В чем конкретно преимущество?

Для меня самый большой плюс ts - это сама типизация - знание с каким типом данных работаешь, какие у него есть свойства и методы.
Особенно это помогает при работе с внешними данными: отпадает нужда каждый раз смотреть в консоли набор каких данных вернул сервер.

Rise 17.05.2023 18:06

webgraph,

TypeScript - продукт Microsoft. Подсказки IDE - это Language Server Protocol - продукт Microsoft. Сама IDE - это Visual Studio Code - продукт Microsoft. Без LSP и VS Code не было бы такой популярности у TS. Всё это результат монополии Microsoft, когда много денег и можно всё купить. Например, купить GitHub и остановить разработку Atom, конкурента VS Code.

webgraph 17.05.2023 19:03

Цитата:

Сообщение от Rise (Сообщение 551889)
webgraph,

TypeScript - продукт Microsoft. Подсказки IDE - это Language Server Protocol - продукт Microsoft. Сама IDE - это Visual Studio Code - продукт Microsoft. Без LSP и VS Code не было бы такой популярности у TS. Всё это результат монополии Microsoft, когда много денег и можно всё купить. Например, купить GitHub и остановить разработку Atom, конкурента VS Code.

Точняк. Не люблю мелкомягких :D они вечно пытаются что-то выдумать.

webgraph 17.05.2023 19:10

Цитата:

Сообщение от ksa (Сообщение 551885)
Очень просто.
Начинают писать... Делают кучу опечаток... Передают аргументы абы как... Потом не могут все это поправить.


Тут как бы еще с размерами проектов определиться
- маленький
- средний
- большой
Как измерять? :D

Например 10 человек разрабатывали что-то 1 год... Это какой размер?

Вы хотите сказать что TS создавался для говнокодеров?

voraa 17.05.2023 21:37

Хотя есть некоторые вещи, которые TS помогает отследить.
Например, простой код на js
const anchor = document.querySelector ('.class');
const href = anchor.href

Вроде все просто. Но ts сразу начнет возражать, что anchor может быть null. И волей неволей либо поставишь проверку, либо поклянешься, что null тут не будет. Либо поставишь проверку, что это должен быть элемент <a>, либо убедишь ts (приведением типа), что это обязан быть элемент <a>

voraa 17.05.2023 21:44

Цитата:

Сообщение от Nexus
Особенно это помогает при работе с внешними данными: отпадает нужда каждый раз смотреть в консоли набор каких данных вернул сервер.

Это не спасает от ошибки, если вдруг сервер вернет не те данные, которые описаны в ts.

voraa 17.05.2023 21:48

Цитата:

Сообщение от webgraph
Вы хотите сказать что TS создавался для говнокодеров?

Мне тоже так иногда кажется.
Ну еще есть мнение, что люди приходили в js с других языков, типа C, Java и прочих со строгой типизацией. И их оторопь брала, как это можно без типов? Срочно подайте типы, мы без них не умеем.

ksa 18.05.2023 09:58

Цитата:

Сообщение от webgraph
Вы хотите сказать что TS создавался для говнокодеров?

Я лишь отвечаю на твои вопросы... :D

Говнокодить можно на чем угодно.

Nexus 18.05.2023 14:02

Цитата:

Сообщение от voraa
Это не спасает от ошибки, если вдруг сервер вернет не те данные, которые описаны в ts.

Это про удобство было, а не про ошибки.


С помощью ts можно реализовать валидацию ключей (+ autocomplete) для доступа к данным объекта в dot-notation: пример.
Это и + к удобству работы, и от ошибок отгородит.

Aetae 19.05.2023 10:53

Цитата:

Сообщение от webgraph (Сообщение 551880)
Есть какие-то другие аргументы?

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

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

ksa 19.05.2023 11:33

Ранее любой школьник мог величать себя веб-мастером, потом веб-разработчиком...

Сейчас все усложняется, повышается "порог вхождения" в профессию. Как следствие - отсеиваются "слабые". :)

Сделать простенькую страничку на основе готовых шаблонов могли многие...

Добавили Реакт (и пр.). Подвесили "тесты", да еще и разного "уровня". Кому показалось мало - добавили TS.

Пока тенденции только к повышению "порога". Кто осилит - молодец.
Главное чтобы работодатель все это оплачивал. А "на чем" и "как" не особо важно...

webgraph 19.05.2023 13:00

Цитата:

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

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

Лол, что вы несете? Откуда такая агрессия? :D

Наоборот я за развитие и изучение нового. Тот же JS постоянно открывает для меня новые грани вместе с ростом моих потребностей в решении поставленных задач.

"Прирост в скорости в 2 раза?" Скорости чего? Покажите реальные тесты, бенчмарки.

"загрузки в память мусора" — какого ещё мусора?

webgraph 19.05.2023 13:14

Цитата:

Сообщение от ksa (Сообщение 551936)
Ранее любой школьник мог величать себя веб-мастером, потом веб-разработчиком...

Сейчас все усложняется, повышается "порог вхождения" в профессию. Как следствие - отсеиваются "слабые". :)

Сделать простенькую страничку на основе готовых шаблонов могли многие...

Добавили Реакт (и пр.). Подвесили "тесты", да еще и разного "уровня". Кому показалось мало - добавили TS.

Пока тенденции только к повышению "порога". Кто осилит - молодец.
Главное чтобы работодатель все это оплачивал. А "на чем" и "как" не особо важно...

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

По мне так TypeScript — это тот же jQuery или какой-то React, а не прям отдельный язык программирования.

Aetae 19.05.2023 14:50

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

Цитата:

По мне так TypeScript — это тот же jQuery или какой-то React.
С одной стороны это тупое заявление, но с другой есть и общая черта - ускорение и упрощении работы программиста, которые принесла каждая из технологий в своё время.
Если ты топишь за ванилу, потому что главное - это скорость работы программы, а всё остальное презренно и ничтожно - пиши на ассеблере и не приставай к адекватным людям. Может быть даже закончишь за свою жизнь один какой-нибудь суперскоростной микропроект.

ksa 19.05.2023 16:46

Цитата:

Сообщение от webgraph
Ну вот тенденция как раз идёт на клепание приложений с минимальной затратой времени. По итогу страдает само качество — код более сложный, приложения более медленные, глюков и ошибок — всё больше и больше (как при написании самого кода, так и потом в дальнейшей работе приложения). Баги растут как на дрожжах.

По мне так TypeScript — это тот же jQuery или какой-то React, а не прям отдельный язык программирования.

Очень странные, для меня, выводы из мной написанного... :blink:

webgraph 19.05.2023 18:11

Цитата:

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

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

Уфф как у тебя бомбит)) это всё TypeScript на тебя так влияет?))

webgraph 19.05.2023 18:12

Цитата:

Сообщение от ksa (Сообщение 551948)
Очень странные, для меня, выводы из мной написанного... :blink:

И какие же выводы хотел сделать именно ты?)

ksa 22.05.2023 09:47

Цитата:

Сообщение от webgraph
И какие же выводы хотел сделать именно ты?

Я TS пока не использую... Т.к. это однозначно повысит "порог вхождения".

Правда пока мы не определились чем измерять величину создаваемого ПО... Т.ч. вполне возможно у нас просто маленькие ПО.

Aetae 23.05.2023 15:07

ksa, про порог вхождения - очень спорно. Сейчас собеседую чуваков, большинство сразу с ts начинали и без ts теряются.)

ksa 24.05.2023 10:45

Aetae, тут уже мне не понятно...
Одно дело когда нужно что-то писать (TS) и писать что-то правильно, а не абы что.
И когда вообще ничего не писать.

Второе однозначно проще.

Или к тебе приходят абсолютные эксперты по TS, без которого они уже ничего не могут сделать?

Просто ко мне приходят те, кто и JS-то может совсем не знать... А уж TS и подавно...

Aetae 24.05.2023 18:45

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

Даёшь им банальный пример, типа:
class Some {
  constructor(text) {
     this.text = text;
  }
  //...
}

Они такие "Ачё всмысле, что это за this.text, отуда он взялся и что делает?...".
Всё потому что привкли, что рандомную хрень в класс писать низя, должно быть чётко:

class Some {
  public text?: string;

  constructor(text: string) {
     this.text = text;
  }
  //...
}

=)

ksa 25.05.2023 09:30

Цитата:

Сообщение от Aetae
фишка в том что ts более строг, меньше свободы - проще в голову уложить

Мне приходится "подтягивать" новичков до приемлемого уровня программирования на JS, а это месяц-два (программировать на чем-то уже умеет)...
Если еще и TS-у учить до приемлемого уровня - еще время уйдет. Текста писать больше придется... Отсюда упадет скорость "выдачи" программного продукта... А его требуют достаточно много, при небольшом коллективе программистов.

Т.е. мы так не созрели для "поднятия планки" в разработке. :cray:
Там же ведь еще и тестирование "в спину дышит"! А на него еще такой же коллектив нужен, а то и покруче... :)

Alexandroppolus 25.05.2023 13:03

Субъективно: когда пишешь на ts, ощущение будто катишься по рельсам, но эти рельсы надо прокладывать (определять типы). А js - как раздолбанная проселочная дорога, и постоянно непонятно, что за объекты у тебя на руках и как с ними работать.

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

Автокомплит js там тоже неплох, но только если мы напрямую используем какие-то объекты, созданные прямо здесь же, или заимпортированные. Ну или классы. Любая разновидность инъекции (даже просто параметры функций) разваливает автокомплит в хлам.

Так же сила ts проявляется при рефакторинге, или просто каких-то изменениях. Когда поменяешь что-то там и сям, контроль типов очень помогает найти забытые куски кода.

В общем, плюсов много, использовать рекомендую.

webgraph 25.05.2023 15:21

Цитата:

Сообщение от Alexandroppolus
js - как раздолбанная проселочная дорога

Не слишком ли резковатое высказывание?)) XD

По аналитике можно сделать вывод, что TS — это исключительно статическая типизация.

У меня есть сильное чувство, что её просто скоро завезут в JS. Ибо он всё более и более низкоуровневым становится. И причём можно будет как указывать тип, так и нет (наподобие как в PHP).

По мне так даже лучше, когда у тебя есть выбор. Сначала просто накидать код, чтоб быстрее реализовать результат. А потом можно и типы проработать. В общем, кто как хочет и кому как удобнее.

А где вообще можно отслеживать предлагаемые нововведения в JS? Голосовать там или даже предлагать?)

voraa 25.05.2023 17:54

Цитата:

Сообщение от Nexus
Особенно это помогает при работе с внешними данными: отпадает нужда каждый раз смотреть в консоли набор каких данных вернул сервер.

Мне в ответ сервер (сторонний api) возвращает такой json
{
    "status": "ok",
    "message-type": "work",
    "message-version": "1.0.0",
    "message": {
        "indexed": {
            "date-parts": [[2022, 12, 26]],
            "date-time": "2022-12-26T14:49:48Z",
            "timestamp": 1672066188725
        },
        "reference-count": 5,
        "publisher": "Keldysh Institute of Applied Mathematics",
        "issue": "82",
        "content-domain": { "domain": [], "crossmark-restriction": false },
        "short-container-title": ["KIAM Prepr."],
        "published-print": { "date-parts": [[2017]] },
        "DOI": "10.20948/prepr-2017-82",
        "type": "journal-article",
        "created": {
            "date-parts": [[2017, 9, 15]],
            "date-time": "2017-09-15T10:21:58Z",
            "timestamp": 1505470918000
        },
        "page": "1-14",
        "source": "Crossref",
        "is-referenced-by-count": 4,
        "title": ["Updated revision date for reference to alive publication"],
        "prefix": "10.20948",
        "author": [
            {
                "ORCID": "http://orcid.org/0000-0002-7044-8287",
                "authenticated-orcid": false,
                "given": "Mikhail Mikhailovich",
                "family": "Gorbunov-Possadov",
                "sequence": "first",
                "affiliation": [
                    { "name": "Keldysh Institute of Applied Mathematics" }
                ]
            },
            {
                "ORCID": "http://orcid.org/0000-0001-7372-3574",
                "authenticated-orcid": false,
                "given": "Rimma Yuryevna",
                "family": "Skornyakova",
                "sequence": "additional",
                "affiliation": [
                    { "name": "Keldysh Institute of Applied Mathematics" }
                ]
            }
        ],
        "member": "8521",
        "published-online": { "date-parts": [[2017]] },
        "reference": [
            {
                "key": "1",
                "unstructured": "\u0413\u043e\u0440\u0431\u0443\u043d\u043e\u0432-\u041f\u043e\u0441\u0430\u0434\u043e\u0432 \u041c.\u041c. \u0416\u0438\u0432\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f // \u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u2014 2011, \u2116 4. \u2014 \u0421. 48\u201349. \u2014 URL: http://keldysh.ru/gorbunov/live.htm"
            },
            {
                "key": "2",
                "doi-asserted-by": "publisher",
                "unstructured": "\u0413\u043e\u0440\u0431\u0443\u043d\u043e\u0432-\u041f\u043e\u0441\u0430\u0434\u043e\u0432 \u041c.\u041c. \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0443\u0447\u0435\u043d\u043e\u0433\u043e \u2014 [\u0431.\u2009\u043c.]: \u0418\u0437\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, 2017. \u2014 64 \u0441. \u2014 doi:10.20948/ridero-2017-gorbunov \u2014 ISBN 978-5-4483-7792-1",
                "DOI": "10.20948/ridero-2017-gorbunov"
            },
            {
                "key": "3",
                "unstructured": "\u0416\u0438\u0432\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u2014 URL: http://alive.keldysh.ru"
            },
            {
                "key": "4",
                "unstructured": "Dublin Core Metadata Initiative. \u2014 URL: http://dublincore.org/"
            },
            {
                "key": "5",
                "unstructured": "\u0410\u0432\u0442\u043e\u0440\u0443 \u043f\u0440\u0435\u043f\u0440\u0438\u043d\u0442\u0430 \u0418\u041f\u041c \u0438\u043c.\u041c.\u0412.\u041a\u0435\u043b\u0434\u044b\u0448\u0430 \u2014 URL: http://keldysh.ru/preprints/"
            }
        ],
        "container-title": ["Keldysh Institute Preprints"],
        "original-title": [
            "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u0434\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 \u0432 \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430 \u0436\u0438\u0432\u0443\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e"
        ],
        "deposited": {
            "date-parts": [[2020, 1, 16]],
            "date-time": "2020-01-16T09:06:58Z",
            "timestamp": 1579165618000
        },
        "score": 1,
        "resource": {
            "primary": {
                "URL": "http://keldysh.ru/papers/2017/prep2017_82.pdf"
            }
        },
        "subtitle": [],
        "short-title": [],
        "issued": { "date-parts": [[2017]] },
        "references-count": 5,
        "journal-issue": {
            "issue": "82",
            "published-online": { "date-parts": [[2017]] },
            "published-print": { "date-parts": [[2017]] }
        },
        "URL": "http://dx.doi.org/10.20948/prepr-2017-82",
        "relation": {},
        "ISSN": ["2071-2898", "2071-2901"],
        "issn-type": [
            { "value": "2071-2898", "type": "print" },
            { "value": "2071-2901", "type": "electronic" }
        ],
        "subject": ["General Medicine"],
        "published": { "date-parts": [[2017]] }
    }
}

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

И как описание объекта поможет, если вдруг в api что то поменяют? Например, добавят какие то поля?

voraa 25.05.2023 18:13

Цитата:

Сообщение от webgraph
У меня есть сильное чувство, что её просто скоро завезут в JS.

Ну есть такие предложения. Но описания типов только для пишущего и читающего код. Сам движок никакой проверки производить не будет. Он будет считать такие описания комментариями. Для IDE это будет помощь. Но в принципе такое уже есть - JSDOC. VSCode вполне успешно с ним работает. Почти, как в ts (некоторые возможности не реализованы) - проверяет типы объектов, переменных, функций... Но более многословен, чем ts
Одно из преимуществ - отсутствие этапа компиляции. В небольших проектах, по мне, он нафиг не нужен.
Код передается браузеру как есть. Может быть спокойно минификирован.
Например, кусок кода с JSDOC
/**
 * @typedef BiblioElemNum
 * @type {{
 * [id:string]:{
 * 		elem:HTMLElement,
 * 		num:number,
 * 		cites:HTMLAnchorElement[],
 * }
 * }}
 */
 
/**
 * @type {?BiblioElemNum}
 */
let biblioids = null;


/**
 * @param {HTMLElement} elem
 */
const insertBiblioBut = (elem) => {
	elem.style.position = 'relative';
	const biblbut = /** @type {DocumentFragment} */ (bibliobut.cloneNode(true));
	$data(
		/**@type {HTMLElement}*/ ($di(biblbut, 'p-biblio-but')),
		'p-biblio-id',
		elem.id
	);
	elem.append(biblbut);
};

/**
 * @param {HTMLElement} cont - контейнер с элементов библиографии
 * @returns {BiblioElemNum}
 */
const findBiblios = (cont) => {
	$data(cont, 'p-biblio-cont', '');
	return /**@type {HTMLElement[]} */ (Array.from(cont.children)).reduce(
		(a, e, i) => {
			if (e.id)
				a[e.id] = {
					elem: e,
					num: i + 1,
					cites: [...getCitesById(e.id)],
				};
			if (a[e.id].cites.length) insertBiblioBut(e);
			else
				console.warn(
					`Нет отсылок на элемент библиографии ${a[e.id].num} с id="${
						e.id
					}"`
				);
			return a;
		},
		/**@type BiblioElemNum*/ ({})
	);
};

/**
 * @param {string} id - id элемента библиографии
 * @returns {NodeListOf<HTMLAnchorElement>}
 */
const getCitesById = (id) => {
	return /**@type {NodeListOf<HTMLAnchorElement>} */ (
		$a(`a.${crefbiblio}[href="#${id}"]`)
	);
};

Aetae 25.05.2023 18:50

Цитата:

Сообщение от voraa (Сообщение 552058)
Сколько времени уйдет на точное описание на ts такого объекта

Примерно пара секунд - закинуть сюда https://app.quicktype.io/ и скопировать результат.)

Но на практике в более-менее приличном проекте интерфейсы сервера генерируются на лету и из swagger модели автоматически соответствующими тулзами.

По поводу jsdoc - нахрен не нужен в современном вебе. Гораздо более неудобная херня, чем TS при том же смысле. Сейчас без сборки на фронте практические ничего не делается всё равно, чтоб имело смысл с ним возиться.

Цитата:

Сообщение от webgraph (Сообщение 552056)
И причём можно будет как указывать тип, так и нет

Так TS в большинстве случаев выводит типы за тебя. Указывать надо только там, где заведомо какая-то непонятная из кода хуйня.

voraa 25.05.2023 19:14

Цитата:

Сообщение от Aetae
Примерно пара секунд - закинуть сюда https://app.quicktype.io/ и скопировать результат.)

Ругается на
"\u0413\u043e\u0440\u0431\u0443\...."

Цитата:

Сообщение от Aetae
Но на практике в более-менее приличном проекте интерфейсы сервера генерируются на лету и из swagger модели автоматически соответствующими тулзами.

Это не мой сервер, это совершенно сторонний апи


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