uz
Feedback
Frontender's notes [ru]

Frontender's notes [ru]

Kanalga Telegram’da o‘tish

Ведущий канал о современном фронтенде: статьи, новости, практики, вайбкодинг и автоматизация фронта ИИ-агентами. Личный блог автора - @just_genych По вопросам рекламы или разработки - @g_abashkin

Ko'proq ko'rsatish

📈 Telegram kanali Frontender's notes [ru] analitikasi

Frontender's notes [ru] (@frontendnoteschannel_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 32 494 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 4 233-o'rinni va Rossiya mintaqasida 20 068-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 32 494 obunachiga ega bo‘ldi.

13 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -176 ga, so‘nggi 24 soatda esa -31 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 10.47% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 5.47% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 3 403 marta ko‘riladi; birinchi sutkada odatda 1 778 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 30 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent браузер, api, css, интерфейс, загрузка kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
Ведущий канал о современном фронтенде: статьи, новости, практики, вайбкодинг и автоматизация фронта ИИ-агентами. Личный блог автора - @just_genych По вопросам рекламы или разработки - @g_abashkin

Yuqori yangilanish chastotasi (oxirgi ma’lumot 14 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

32 494
Obunachilar
-3124 soatlar
-387 kunlar
-17630 kunlar
Obunachilarni jalb qilish
Iyun '26
Iyun '26
+77
0 kanalda
May '26
+239
22 kanalda
Get PRO
Aprel '26
+300
0 kanalda
Get PRO
Mart '26
+136
1 kanalda
Get PRO
Fevral '26
+156
1 kanalda
Get PRO
Yanvar '26
+250
60 kanalda
Get PRO
Dekabr '25
+319
28 kanalda
Get PRO
Noyabr '25
+379
69 kanalda
Get PRO
Oktabr '25
+210
32 kanalda
Get PRO
Sentabr '25
+265
90 kanalda
Get PRO
Avgust '25
+111
6 kanalda
Get PRO
Iyul '25
+223
2 kanalda
Get PRO
Iyun '25
+247
9 kanalda
Get PRO
May '25
+255
4 kanalda
Get PRO
Aprel '25
+266
1 kanalda
Get PRO
Mart '25
+285
24 kanalda
Get PRO
Fevral '25
+449
27 kanalda
Get PRO
Yanvar '25
+380
36 kanalda
Get PRO
Dekabr '24
+612
53 kanalda
Get PRO
Noyabr '24
+576
40 kanalda
Get PRO
Oktabr '24
+439
27 kanalda
Get PRO
Sentabr '24
+470
34 kanalda
Get PRO
Avgust '24
+466
24 kanalda
Get PRO
Iyul '24
+458
34 kanalda
Get PRO
Iyun '24
+431
33 kanalda
Get PRO
May '24
+442
30 kanalda
Get PRO
Aprel '24
+371
26 kanalda
Get PRO
Mart '24
+374
13 kanalda
Get PRO
Fevral '24
+846
4 kanalda
Get PRO
Yanvar '24
+590
22 kanalda
Get PRO
Dekabr '23
+786
34 kanalda
Get PRO
Noyabr '23
+431
8 kanalda
Get PRO
Oktabr '23
+522
1 kanalda
Get PRO
Sentabr '23
+842
0 kanalda
Get PRO
Avgust '23
+1 001
0 kanalda
Get PRO
Iyul '23
+1 476
0 kanalda
Get PRO
Iyun '23
+1 096
0 kanalda
Get PRO
May '23
+916
0 kanalda
Get PRO
Aprel '23
+908
0 kanalda
Get PRO
Mart '23
+878
0 kanalda
Get PRO
Fevral '23
+584
0 kanalda
Get PRO
Yanvar '23
+1 454
0 kanalda
Get PRO
Dekabr '22
+638
0 kanalda
Get PRO
Noyabr '22
+1 656
0 kanalda
Get PRO
Oktabr '22
+536
0 kanalda
Get PRO
Sentabr '22
+537
0 kanalda
Get PRO
Avgust '22
+857
0 kanalda
Get PRO
Iyul '22
+1 735
0 kanalda
Get PRO
Iyun '22
+523
0 kanalda
Get PRO
May '22
+218
0 kanalda
Get PRO
Aprel '22
+268
0 kanalda
Get PRO
Mart '22
+186
0 kanalda
Get PRO
Fevral '22
+424
0 kanalda
Get PRO
Yanvar '22
+734
0 kanalda
Get PRO
Dekabr '21
+816
0 kanalda
Get PRO
Noyabr '21
+663
0 kanalda
Get PRO
Oktabr '21
+1 410
0 kanalda
Get PRO
Sentabr '21
+565
0 kanalda
Get PRO
Avgust '21
+1 525
0 kanalda
Get PRO
Iyul '21
+1 531
0 kanalda
Get PRO
Iyun '21
+1 533
0 kanalda
Get PRO
May '21
+2 084
0 kanalda
Get PRO
Aprel '21
+1 811
0 kanalda
Get PRO
Mart '21
+8 672
0 kanalda
Get PRO
Fevral '21
+1 828
0 kanalda
Get PRO
Yanvar '21
+1 309
0 kanalda
Get PRO
Dekabr '20
+12 495
0 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
14 Iyun+3
13 Iyun0
12 Iyun+8
11 Iyun+30
10 Iyun+20
09 Iyun+6
08 Iyun+1
07 Iyun0
06 Iyun0
05 Iyun+2
04 Iyun+3
03 Iyun+1
02 Iyun+1
01 Iyun+2
Kanal postlari
CSS Anchor Positioning — это то, чего давно не хватало для тултипов, поповеров и меню: привязка одного элемента к другому на
CSS Anchor Positioning — это то, чего давно не хватало для тултипов, поповеров и меню: привязка одного элемента к другому на уровне CSS, без ручного расчёта координат в JS. Раньше типичный flow был такой: 1. getBoundingClientRect() 2. посчитать top / left 3. записать inline-стили 4. пересчитать при scroll / resize / zoom / изменении контента 5. случайно получить layout thrashing Особенно неприятно, когда таких тултипов десятки, они живут в порталах, попадают в top layer или должны флипаться при нехватке места. CSS Anchor Positioning решает именно эту задачу: элемент объявляется «якорем», а другой элемент позиционируется относительно него. Минимальный пример:
<button class="help" popovertarget="tip">
  ?
</button>

<div id="tip" popover class="tooltip">
  Подсказка без JS-позиционирования
</div>
.help {
  anchor-name: --help;
}

.tooltip {
  position: absolute;
  position-anchor: --help;

  inset-block-start: anchor(block-end);
  inset-inline-start: anchor(center);

  translate: -50% 8px;
  margin: 0;

  padding: 8px 12px;
  border-radius: 8px;
  background: #111;
  color: white;
}
Что здесь происходит: - .help становится anchor-элементом через anchor-name - .tooltip привязывается к нему через position-anchor - anchor(block-end) берёт нижнюю границу кнопки - anchor(center) берёт горизонтальный центр кнопки - translate добавляет смещение для красивого отступа JS при этом может заниматься только поведением: открыть / закрыть поповер, обработать action, синхронизировать состояние. Но не измерять DOM и не писать координаты. В этом и главная ценность: positioning переезжает туда, где ему место — в layout engine браузера. Почему это важно для производительности: - меньше getBoundingClientRect() в рантайме - меньше forced reflow - меньше resize / scroll listeners - меньше кастомной логики для пересчёта позиции - проще работать с Popover API и top layer - меньше зависимости от тяжёлых positioning-библиотек там, где нужна простая привязка Для сложных кейсов вроде dropdown-меню, context menu или rich tooltip всё ещё могут понадобиться fallback-стратегии, collision handling и прогрессивное улучшение. Но базовый сценарий «показать элемент около другого элемента» наконец-то становится декларативным. Практический вывод: если вы сейчас используете JS только для того, чтобы положить tooltip под кнопку, стоит присмотреться к связке: - Popover API — для поведения и top layer - CSS Anchor Positioning — для координат - JS — только для бизнес-логики, а не layout-математики Это не полная замена Floating UI / Popper во всех сценариях, но очень сильный нативный primitive, который закрывает большой пласт повседневных задач без layout thrashing.

2
Совет на ближайшие годы — изучайте ВАЙБ-КОДИНГ ИИ уже пишет код, чинит баги, генерирует тесты, документацию и помогает запуск
Совет на ближайшие годы — изучайте ВАЙБ-КОДИНГ ИИ уже пишет код, чинит баги, генерирует тесты, документацию и помогает запускать продукты быстрее, чем это делали классические команды разработки. И это уже не "будущее когда-нибудь", а реальность, которая меняет рынок уже сегодня И те, кто научится вайбкодить сейчас, будут увереннее конкурировать на рынке и зарабатывать больше тех, кто по-прежнему делает всё вручную. Стартовать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы. Подписывайтесь, нас уже 45 тысяч: @vibecoding_tg
1 414
3
⁣AsyncLocalStorage в Node.js: request-scoped контекст для логов, трассировки и транзакций без prop drilling В production это нужно в Node.js-сервисах, SSR, API integration и backend-for-frontend слоях, где requestId, traceId, tenant или транзакция должны проходить через async-код. Частая ошибка - протаскивать ctx через десятки методов или, наоборот, прятать в нём бизнес-состояние. Как это выглядит AsyncLocalStorage использует async_hooks и привязывает store к async execution flow: promise, timeout, I/O callback и большинству стандартных API Node.js. type Ctx = { requestId: string; traceId?: string; tx?: unknown }; const als = new AsyncLocalStorage<Ctx>(); app.use((req, _res, next) => { als.run({ requestId: req.headers['x-request-id']?.toString() ?? randomUUID(), traceId: req.headers.traceparent?.toString(), }, next); }); const getCtx = () => als.getStore(); function logInfo(msg: string, meta = {}) { const c = getCtx(); logger.info({ requestId: c?.requestId, traceId: c?.traceId, ...meta, }, msg); } Теперь сервисный код не знает про HTTP middleware и req, но логи автоматически получают correlation metadata. Транзакции без протаскивания tx Для DB слоя можно делать withTransaction(), который запускает als.run({ ...ctx, tx }, fn), а getDbExecutor() возвращает ctx.tx ?? db. Trade-off хороший: меньше шума в API сервисов, но граница ответственности остаётся инфраструктурной, а не бизнесовой. Где границы * не заменяйте аргументы функции: бизнес-данные передавайте явно; * не кладите в store req, res, большие payload или ORM graph; * context не пересекает process boundary: worker threads, очереди, cron jobs и другие сервисы требуют явной передачи ids; * нестандартные callback-based библиотеки могут разорвать async chain. Практическое правило: используйте AsyncLocalStorage для логов, tracing, tenant/user metadata, аудита и текущей транзакции, а не для скрытого глобального состояния. Вывод: AsyncLocalStorage полезен, когда request-scoped инфраструктурный контекст улучшает observability и DX, но не размывает явные границы бизнес-логики.
1 581
4
АЙТИШНИКИ БЕСПЛАТНОЕ ОБУЧЕНИЕ сборник курсов, инструментов и книг Проект «TERMINAL» стал крупнейшей библиотекой бесплатного о
АЙТИШНИКИ БЕСПЛАТНОЕ ОБУЧЕНИЕ сборник курсов, инструментов и книг Проект «TERMINAL» стал крупнейшей библиотекой бесплатного образования. В одном канале собраны курсы, книги, полезные инструменты и практические тренажёры для всех разработчиков 🎓 Практические курсы и задания 🪽 Книги и статьи известных авторов 😮‍💨 Полезные инструменты и ресурсы 🌟 IT-новости и инсайды Обучение по всем направлениям: SQL, Python, Frontend, PHP, C++, Golang, GIT, Linux, QA, Java, Vibe-coding, Infosec и др. Ценишь знания, подпишись: Terminal_tg
1 963
5
AbortSignal.any() и AbortSignal.timeout(): единая отмена fetch, таймеров и async-операций в production Promise.race([fetch(),
AbortSignal.any() и AbortSignal.timeout(): единая отмена fetch, таймеров и async-операций в production Promise.race([fetch(), timeout]) часто маскирует проблему: ждать перестали, но работа могла не остановиться. В SPA, SSR, Node.js-сервисах, SDK и API clients это приводит к висящим запросам, таймерам и retry/backoff ниже по стеку. Собирайте отмену вокруг AbortSignal AbortSignal.timeout(ms) сам отменится по таймауту. AbortSignal.any([...signals]) отменится, когда отменится любой входной signal. Так в один контракт попадают: * caller отменил операцию * истек timeout * клиент закрыл соединение * сервис уходит в graceful shutdown const shutdown = new AbortController(); async function loadUser(id: string, opts: { signal?: AbortSignal } = {}) { const signal = AbortSignal.any([ AbortSignal.timeout(1500), shutdown.signal, ...(opts.signal ? [opts.signal] : []), ]); signal.throwIfAborted(); const res = await fetch(`https://api.example.com/users/${id}`, { signal }); await sleep(100, signal); // backoff тоже отменяем const data = await res.json(); signal.throwIfAborted(); return data; } Типичная ошибка Не останавливайтесь на fetch. Один и тот же signal стоит передавать в retry, polling, очереди, sleep/timer helpers и свои async-функции. Иначе верхний слой "отменился", а нижний продолжает держать ресурсы. Практические нюансы * AbortSignal одноразовый: если aborted === true, нужен новый controller или timeout * AbortSignal.any() - это fan-in, а не fan-out: он не отменяет исходные контроллеры * смотрите на reason: timeout часто дает TimeoutError, abort - AbortError или ваш reason * при обертках над setTimeout, stream, listener или socket чистите ресурсы при abort Вывод: Отмена должна быть частью контракта async-функции, а не локальным Promise.race на краю системы.
2 054
6
Нейросети, IT и AI — в одной папке 💬 С коллегами собрали новые каналы про: 💠 промпты для нейросетей и готовые решения 💠 AI
Нейросети, IT и AI — в одной папке 💬 С коллегами собрали новые каналы про: 💠 промпты для нейросетей и готовые решения 💠 AI-фотосессии, генерация изображений и контента 💠 новости искусственного интеллекта без лишнего шума 💠 применение AI в работе, бизнесе и повседневной жизни 💠 Python, JavaScript, Data Science и системный анализ 💠 вакансии и возможности для специалистов в IT Посмотреть и подписаться тут 👉 https://t.me/addlist/c_rbhnzprbAwMmFi 💌 Добавить свой канал в папку
1 891
7
Страшная тайна российского айти ✖️ xCode Journal
Страшная тайна российского айти ✖️ xCode Journal
2 730
8
Хватит гадать — DeepSeek за тебя уже всё решил 🐳 * Сейчас все только про Claude, но я перешёл на DeepSeek и не жалею. Беспла
Хватит гадать — DeepSeek за тебя уже всё решил 🐳 * Сейчас все только про Claude, но я перешёл на DeepSeek и не жалею. Бесплатно, контекст 1 млн токенов — закинул целую книгу, помнит всё. Код пишет отлично, а рассуждения (Reasoning) выдают логику, как у архитектора. Решил протестировать агентский режим на задаче, которую вечно откладывал — собрать чистое инфополе с нуля. Чтобы не перебирать паблики вручную, зашёл через функцию похожих каналов в Telegram. Скормил DeepSeek ссылки на качественных авторов по IT и AI, которых читаю сам, и попросил проанализировать сотни рекомендаций. Агент изучил контент на каналах и оставил только тех, кто делится практическим опытом по: AI-воркфлоу, автоматизации, вайб-кодингу, промт-инжинирингу, RAG-syst. нейрогенерации и др. DeepSeek собрал полезную подборку экспертов в одну папку. Делюсь списком — внутри только полезный контент про IT & AI. 🔗Забирай в один клик: 👉 https://t.me/addlist/FYyQj91I8jJiMzg0
2 348
9
Диктовка для Mac вместо клавиатуры Кодишь с Claude/Cursor и устал печатать промпты и сообщения? Зажал горячую клавишу, сказал
Диктовка для Mac вместо клавиатуры Кодишь с Claude/Cursor и устал печатать промпты и сообщения? Зажал горячую клавишу, сказал - текст сам встал туда, где курсор. В любом приложении: редактор, браузер, мессенджер. - отдельная русская модель: распознаёт русский с пунктуацией, тянет смесь рус/англ-терминов - распознавание локально, на твоём маке - голос не уходит в облако, в отличие от облачных сервисов - от 290 ₽/мес - дешевле зарубежных аналогов - оплата картой РФ, без VPN и зарубежных карт macOS, Apple Silicon 🎁 Промокод FNOTES - месяц Pro бесплатно! → www.taptalk.team/
2 412
10
⁣Variadic tuple types — сложные сигнатуры без боли До variadic tuple types многие сложные сигнатуры в TypeScript выглядели как наказание. Особенно: 👉 curry 👉 compose 👉 middleware 👉 typed event emitter 👉 любые функции с «прокинь аргументы дальше» Приходилось писать overload на overload и дублировать типы вручную. Как было раньше Обычно появлялись: 👉 overload на overload 👉 ручные tuple-типы 👉 тонны дублирования Типы быстро превращались в нечитаемую простыню. Что изменили variadic tuples С их появлением стало намного проще работать с остаточными аргументами на уровне типов. Например: type Fn<T extends unknown[]> = (...args: [...T]) => void Или собирать сигнатуры: type Append<Args extends unknown[], Arg> = [...Args, Arg] Типы наконец научились нормально работать с «переменным количеством аргументов». Почему это важно На практике это одна из тех TS-фич, которые реально упростили жизнь библиотекам. Без variadic tuples: 👉 Redux middleware typings 👉 router APIs 👉 compose/curry utilities были бы ещё страшнее. Где начинается тёмная магия Проблемы начинаются, когда variadic tuples комбинируют с: 👉 infer 👉 recursive types 👉 conditional types Типовая система очень быстро превращается в тёмный лес. IDE начинает тормозить, ошибки становятся нечитаемыми, а compile time — расти. Главная мысль Variadic tuple types — это действительно мощная фича. Главное — вовремя остановиться и не превратить типы в отдельный язык программирования.
2 616
11
Стажировки и вакансии для JavaScript разработчиков - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в T
Стажировки и вакансии для JavaScript разработчиков - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в Telegram @jobs_js_fronted для фронтов @jobs_js_back для бека Пока другие листают джоб-сайты — ты уже пишешь HR в Telegram.
2 171
12
🤣 Не баг, а фича ✖️ xCode Journal
🤣 Не баг, а фича ✖️ xCode Journal
4 158
13
Мой код после сотен правок и костылей
Мой код после сотен правок и костылей
4 781
14
⁣ES2025: Импорт JSON-файлов как модулей Введение С выходом ECMAScript 2025 (ES2025) разработчики получили возможность напрямую импортировать JSON-файлы как модули в JavaScript-коде. Это упрощает работу с конфигурационными данными и другими статическими ресурсами, представленными в формате JSON. Синтаксис импорта JSON-модулей Для импорта JSON-файла используется ключевое слово import с указанием атрибута with { type: 'json' }. Это гарантирует, что импортируемый файл будет обработан как JSON-модуль. Пример использования Рассмотрим пример импорта конфигурационного файла config.json и обращения к его свойствам в коде. import config from './config.json' with { type: 'json' }; .log(config.apiUrl); // Выводит значение свойства apiUrl из config.json console.log(config.timeout); // Выводит значение свойства timeout из config.json ❗️Добавление поддержки импорта JSON-файлов как модулей в ES2025 упрощает работу с данными в формате JSON, делая код более чистым и понятным. Источники JSON Modules Can Now Be Imported in JavaScript in All Modern Browsers, CSS Modules to Follow. New Features in ES2025 – BooleanBuffer.
5 436
15
Стажировки и вакансии для JavaScript разработчиков - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в T
Стажировки и вакансии для JavaScript разработчиков - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в Telegram @jobs_js_fronted для фронтов @jobs_js_back для бека Пока другие листают джоб-сайты — ты уже пишешь HR в Telegram.
1 879
16
⁣Recursive type limits — почему TS иногда «умирает» В TypeScript можно написать тип, который выглядит красиво, но заставляет компилятор страдать. Особенно когда начинаются рекурсивные типы. Например: 👉 глубокий DeepPartial 👉 парсинг строк на уровне типов 👉 сложные conditional types 👉 infer внутри infer На маленьком примере всё работает. В реальном проекте IDE внезапно начинает думать по 5 секунд. Почему так происходит TypeScript не вычисляет типы «бесплатно». Каждый: 👉 conditional type 👉 union 👉 recursive шаг нужно реально посчитать. А если тип разворачивается слишком глубоко, компилятор упирается в лимиты. Отсюда знакомое: Type instantiation is excessively deep and possibly infinite И это не всегда баг TypeScript. Часто это сигнал, что типовая модель стала слишком умной. Где обычно всё ломается Особенно опасны: 👉 рекурсивные mapped types 👉 огромные union’ы 👉 type-level parser’ы 👉 deeply nested generics 👉 utility types поверх utility types Типы начинают взрываться комбинаторно. Что обычно помогает 👉 не делать type-level акробатику без нужды 👉 ограничивать глубину рекурсии 👉 разбивать типы на более простые 👉 добавлять явные промежуточные типы 👉 не тащить сложные generic-типы в публичный API Почему это важно Сложные типы бьют не только по компиляции. Они ухудшают: 👉 autocomplete 👉 responsiveness IDE 👉 читаемость кода 👉 onboarding новых людей Иногда самый дорогой runtime — это compile time. Главная мысль Хороший TypeScript — это не когда типы поражают воображение. Хороший TypeScript — это когда их можно понять через полгода, а IDE при этом не превращается в обогреватель.
3 945
17
Привет, друзья! Собрали с коллегами новую папку с каналами Здесь AI-новости, нейросети, полезные инструменты, примеры внедрен
Привет, друзья! Собрали с коллегами новую папку с каналами Здесь AI-новости, нейросети, полезные инструменты, примеры внедрения ИИ в крупный бизнес, разработка, JS, Node.js, frontend, QA, Data Science, кибербезопасность и IT-вакансии. Посмотреть и подписаться можно тут 👉 https://t.me/addlist/XttiKDt6lhUwMzEy 💌 записаться в папку
1 797
18
⁣Isolated declarations — ускорение больших monorepo В TypeScript есть флаг isolatedDeclarations. Он нужен не для красоты типов, а для скорости. Проблема простая: в больших monorepo генерация .d.ts может становиться узким местом. TypeScript часто должен анализировать соседние файлы, чтобы понять, какие декларации вывести. На маленьком проекте это почти незаметно. На большом — начинает болеть. Что делает isolatedDeclarations isolatedDeclarations заставляет писать код так, чтобы декларации можно было генерировать по файлам независимо. Из-за этого TypeScript чаще требует явные типы. Было: export function getUser() { return { id: 1, name: 'Alex' } } Лучше так: type User = { id: number name: string } export function getUser(): User { return { id: 1, name: 'Alex' } } Меньше магии для компилятора — быстрее и предсказуемее сборка. Почему это важно Когда проект растёт: 👉 TypeScript начинает сильнее зависеть от соседних файлов 👉 инкрементальная сборка замедляется 👉 генерация типов становится дорогой Изоляция помогает компилятору работать параллельно и проще. Где это особенно полезно 👉 большие monorepo 👉 библиотеки 👉 project references 👉 параллельная сборка 👉 CI, где каждая минута стоит денег Главный trade-off Ты немного платишь: 👉 более явными типами 👉 меньшим type inference 👉 дополнительным boilerplate Но взамен получаешь: 👉 более быстрые сборки 👉 стабильный compile pipeline 👉 меньше скрытой сложности Главная мысль Это хороший пример взрослого engineering trade-off: чуть больше явности в коде ради скорости и предсказуемости системы.
3 107
19
⁉️ Устал искать интересные каналы с новостями про искусственный интеллект? 📁 СОХРАНИ СЕБЕ ЧТОБЫ НЕ ПОТЕРЯТЬ В этой папке соб
⁉️ Устал искать интересные каналы с новостями про искусственный интеллект? 📁 СОХРАНИ СЕБЕ ЧТОБЫ НЕ ПОТЕРЯТЬ В этой папке собраны каналы про ИИ, которые помогают быстрее разобраться в сфере, находить идеи и экономить время на поиске информации. 😏 ЗАБИРАЙ ПАПКУ ТУТ ⏰ Папка действует 72 часа. 🤩 Организаторы: Green.Papka
2 328
20
🤣 Мем отлично отражает настроения в сообществе прямо сейчас ✖️ xCode Journal
🤣 Мем отлично отражает настроения в сообществе прямо сейчас ✖️ xCode Journal
3 728