fa
Feedback
Dev News от Максима Соснова

Dev News от Максима Соснова

رفتن به کانال در Telegram

Привет! Меня зовут Максим Соснов и по утрам я читаю всякие разные дайджесты про фронтенд, разработку и управление разработкой. Самые интересные, по моему мнению, ссылки из этих дайджестов я кидаю в этот канал с небольшим описанием. Контакт: @msosnov

نمایش بیشتر
2 822
مشترکین
+224 ساعت
+17 روز
+1030 روز
جذب مشترکین
ژوئیه '26
ژوئیه '26
+28
در 0 کانال‌ها
ژوئن '26
+46
در 0 کانال‌ها
Get PRO
مه '26
+46
در 1 کانال‌ها
Get PRO
آوریل '26
+41
در 0 کانال‌ها
Get PRO
مارس '26
+39
در 0 کانال‌ها
Get PRO
فوریه '26
+41
در 0 کانال‌ها
Get PRO
ژانویه '26
+31
در 0 کانال‌ها
Get PRO
دسامبر '25
+27
در 1 کانال‌ها
Get PRO
نوامبر '25
+33
در 1 کانال‌ها
Get PRO
اکتبر '25
+65
در 2 کانال‌ها
Get PRO
سپتامبر '25
+54
در 1 کانال‌ها
Get PRO
اوت '25
+52
در 0 کانال‌ها
Get PRO
ژوئیه '25
+86
در 7 کانال‌ها
Get PRO
ژوئن '25
+50
در 0 کانال‌ها
Get PRO
مه '25
+57
در 0 کانال‌ها
Get PRO
آوریل '25
+68
در 4 کانال‌ها
Get PRO
مارس '25
+79
در 2 کانال‌ها
Get PRO
فوریه '25
+72
در 2 کانال‌ها
Get PRO
ژانویه '25
+75
در 1 کانال‌ها
Get PRO
دسامبر '24
+88
در 2 کانال‌ها
Get PRO
نوامبر '24
+156
در 1 کانال‌ها
Get PRO
اکتبر '24
+96
در 1 کانال‌ها
Get PRO
سپتامبر '24
+87
در 0 کانال‌ها
Get PRO
اوت '24
+134
در 3 کانال‌ها
Get PRO
ژوئیه '24
+87
در 1 کانال‌ها
Get PRO
ژوئن '24
+111
در 0 کانال‌ها
Get PRO
مه '24
+795
در 2 کانال‌ها
Get PRO
آوریل '24
+41
در 0 کانال‌ها
Get PRO
مارس '24
+55
در 1 کانال‌ها
Get PRO
فوریه '24
+63
در 1 کانال‌ها
Get PRO
ژانویه '24
+98
در 1 کانال‌ها
Get PRO
دسامبر '23
+94
در 2 کانال‌ها
Get PRO
نوامبر '23
+31
در 1 کانال‌ها
Get PRO
اکتبر '23
+88
در 1 کانال‌ها
Get PRO
سپتامبر '23
+58
در 0 کانال‌ها
Get PRO
اوت '23
+47
در 0 کانال‌ها
Get PRO
ژوئیه '23
+36
در 0 کانال‌ها
Get PRO
ژوئن '23
+44
در 0 کانال‌ها
Get PRO
مه '23
+27
در 0 کانال‌ها
Get PRO
آوریل '23
+54
در 0 کانال‌ها
Get PRO
مارس '23
+61
در 0 کانال‌ها
Get PRO
فوریه '23
+33
در 0 کانال‌ها
Get PRO
ژانویه '23
+42
در 0 کانال‌ها
Get PRO
دسامبر '22
+35
در 0 کانال‌ها
Get PRO
نوامبر '22
+138
در 0 کانال‌ها
Get PRO
اکتبر '22
+65
در 0 کانال‌ها
Get PRO
سپتامبر '22
+114
در 0 کانال‌ها
Get PRO
اوت '22
+18
در 0 کانال‌ها
Get PRO
ژوئیه '22
+48
در 0 کانال‌ها
Get PRO
ژوئن '22
+32
در 0 کانال‌ها
Get PRO
مه '22
+15
در 0 کانال‌ها
Get PRO
آوریل '22
+4
در 0 کانال‌ها
Get PRO
مارس '22
+4
در 0 کانال‌ها
Get PRO
فوریه '22
+21
در 0 کانال‌ها
Get PRO
ژانویه '22
+64
در 0 کانال‌ها
Get PRO
دسامبر '21
+6
در 0 کانال‌ها
Get PRO
نوامبر '21
+8
در 0 کانال‌ها
Get PRO
اکتبر '21
+333
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
23 ژوئیه0
22 ژوئیه+1
21 ژوئیه+2
20 ژوئیه+3
19 ژوئیه+1
18 ژوئیه+1
17 ژوئیه0
16 ژوئیه+2
15 ژوئیه+2
14 ژوئیه0
13 ژوئیه+2
12 ژوئیه0
11 ژوئیه0
10 ژوئیه0
09 ژوئیه+8
08 ژوئیه+1
07 ژوئیه+1
06 ژوئیه+2
05 ژوئیه0
04 ژوئیه+1
03 ژوئیه0
02 ژوئیه0
01 ژوئیه+1
پست‌های کانال
Дайджест за 2026-07-13 - 2026-07-17 Deno 2.9 Вышел Deno 2.9. Пропустил бы релиз, т. к. в целом всё как обычно — улучшают перформанс, улучшают DX, делают лучше интероп с другими пакетными менеджерами. Но в этом релизе добавили сборку desktop-приложений — можно получить GUI без Electron и других обвязок, Deno уже имеет всю инфраструктуру для этого. Iterating faster with TypeScript 7 Статья от VS Code о том, как они мигрируют на новый TS 7. Т. к. VS Code и TypeScript принадлежат одной материнской компании (Microsoft), им очень удобно коллаборировать друг с другом. Более того, VS Code изначально был на TypeScript и шёл с ним рука об руку весь свой путь. В статье рассказывается, как за полгода они переехали на TS 7. Node.js CLI Apps Best Practices Сборник best practices от Liran Tal по Node.js CLI. 37 рекомендаций в 10 группах — от техники и безопасности до удобства работы в терминале. В каждом бест практисе есть описание, почему это важно и как не напортачить, ссылки на источники или готовые решения (например, в виде npm-пакетов). Также есть скилл, чтобы встроить все эти бест практисы в агента. MUST READ, если хотите делать крутые cli. Сборник очень хороший. —————————————— Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам. —————————————— Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы

2
Node.js CLI Apps Best Practices Сборник best practices от Liran Tal по Node.js CLI. 37 рекомендаций в 10 группах — от техники и безопасности до удобства работы в терминале. В каждом бест практисе есть описание, почему это важно и как не напортачить, ссылки на источники или готовые решения (например, в виде npm-пакетов). Также есть скилл, чтобы встроить все эти бест практисы в агента. MUST READ, если хотите делать крутые cli. Сборник очень хороший. 1. Command Line Experience — UX в терминале: - Поддерживайте POSIX-аргументы (-abc = -a -b -c, короткие и длинные флаги) - Проектируйте CLI так, чтобы им было легко и удобно пользоваться - Запоминайте данные и настройки между запусками - Поддерживайте цвета и их отключение - Поддерживайте rich interactions — select, autocomplete, spinner/progress bar - Делайте кликабельные hyperlinks в терминале (URL и file:line:col) - Zero configuration — запуск без конфига и умный детект - Обрабатывайте SIGINT 2. Distribution — как упаковать: - Минимум зависимостей - Фиксируйте версии в npm-shrinkwrap.json - Cleanup конфигов при uninstall 3. Interoperability — CLI как часть unix toolchain: - Умейте обрабатывать STDIN в пайпах (curl … | your_cli) - Умейте выводить structured output (--json) для парсинга и пайпов - Несколько советов для поддержки кросс-платформенности - Уважайте приоритет конфигурации: CLI args → env → project → user → system 4. Accessibility - Docker-образ для тех, у кого нет Node.js - Graceful degradation / --json для CI и слабых терминалов - Поддержка актуальных Node.js версий, понятная ошибка на старых - #!/usr/bin/env node в shebang 5. Testing — не доверяйте locale в assert'ах на текст help/output 6. Errors — ошибки, которые помогают: - Используйте коды ошибок (например, E4002) - Сообщения об ошибках должны вести к действию — не «что-то сломалось», а «сделай X» - Предоставьте дебаг режим - Используйте правильные exit codes - Упростите репортинг багов 7. Development — package.json hygiene: - Советы по использованию поля bin - Используйте относительные пути - Не тащите в files лишнее 8. Analytics — должна быть опциональной 9. Versioning - Всегда предоставляйте флаг --version - Используйте semver - Показывайте версию в help/errors и package.json - Старайтесь быть обратно совместимыми - Публикуйте релизы в npm - Пишите понятные release notes 10. Security — минимизируйте возможность argument injection Также в приложении есть сравнительная таблица CLI-фреймворков и ссылки на обучающие материалы. https://github.com/lirantal/nodejs-cli-apps-best-practices #development #nodejs #cli #best-practices
658
3
Iterating faster with TypeScript 7 Статья от VS Code о том, как они мигрируют на новый TS 7. Т. к. VS Code и TypeScript принадлежат одной материнской компании (Microsoft), им очень удобно коллаборировать друг с другом. Более того, VS Code изначально был на TypeScript и шёл с ним рука об руку весь свой путь. В статье рассказывается, как за полгода они переехали на TS 7. Зачем вообще это понадобилось VS Code: - Хотели как можно скорее переехать на новый TS 7, который написан на Go и работает быстрее - Переезжать по шагам легче, чем делать большой прыжок с большим переездом — особенно в большом проекте TS 7 анонсировали весной 2025. Летом уже был работающий typecheck, который команда VS Code активно тестировала. Команда VS Code репортила проблемы, команда TS тут же их чинила. Также команда VS Code сделала расширение для работы с TS 7, которое позволяет легко переключать TS между версиями и легко репортить проблемы. Далее проект VS Code переехал на TS 6. TypeScript 6 — версия, которая всё ещё написана на TypeScript, но поведение которой близко к будущему TS 7. Далее подключили TS 6 и TS 7 параллельно. Сборку всё ещё делали как раньше, но начали проводить typecheck расширений дополнительно через TS 7 — и оба билда и проверки должны всегда проходить в CI. Так находили расхождения в поведении. Самая частая ошибка, из-за которой ломался CI — различие в форматировании. Я правда не понял, в чём именно, если TS 7 делал лишь typecheck. К началу 2026 TS 7 уже стал более-менее стабильным. Расширения на него мигрировали по одному. Во время переноса упростили тулы для сборки: Было: - tsc — тайпчек и dev-сборка - webpack — prod-сборка - esbuild — быстрый emit Стало: - tsgo — тайпчек и dev-сборка - esbuild — prod-сборка На текущий момент весь проект переключился на TS 7. Цифры: Typecheck основного проекта: # TS 6 tsc --noEmit -p src/tsconfig.json → 36 сек # TS 7 tsgo --noEmit -p src/tsconfig.json → 5 сек npm run watch (main + ~50 extensions): - TS 6: ~80 сек - TS 7: ~20 сек - re-check после initial watch: ~1 сек Language tooling в редакторе: - было ~60 сек - стало ~10 сек https://code.visualstudio.com/blogs/2026/06/26/iterating-faster-with-ts-7 #development #typescript #tsgo #vscode #performance
768
4
Deno 2.9 Вышел Deno 2.9. Пропустил бы релиз, т. к. в целом всё как обычно — улучшают перформанс, улучшают DX, делают лучше интероп с другими пакетными менеджерами. Но в этом релизе добавили сборку desktop-приложений — можно получить GUI без Electron и других обвязок, Deno уже имеет всю инфраструктуру для этого. Как это работает: вы, как обычно, пишете веб-приложение: Deno.serve(() => new Response( "<!DOCTYPE html><h1>Hello from Deno desktop 👋</h1>", { headers: { "content-type": "text/html" } }, ) ); Собираете его: deno desktop main.ts Получаете бинарь. Кликаете на него и видите Hello World в GUI. Что умеет из коробки: - Сборка для Windows, macOS, Linux - Системное webview по умолчанию, но можно забандлить CEF (Chromium Embedded Framework) - Управление иконкой в Tray и Dock - Управление окном Звучит прикольно. https://deno.com/blog/v2.9 #development #javascript #typescript #deno #releaseNotes
868
5
Дайджест за 2026-07-06 - 2026-07-10 eslint-plugin-unicorn Как-то я упустил момент, когда eslint-plugin-unicorn начал активно развиваться. А тем временем там уже больше 300 правил! Правила всякие разные — от специализированных до тех, которые можно использовать в любом проекте. Skills for coding agents Набор скиллов для coding-агентов от BuilderIO. Наборов скиллов много, но здесь мне понравились /visual-plan и /visual-recap, с помощью которых агент может создать план и отчёт, которые удобно читать и в которых используется канвас с диаграммами, мокапами и всем таким. Выглядит круто. The Goldilocks customizable select height Относительно недавно браузеры разрешили полностью кастомизировать <select>. Но, как обычно, чтобы получить идеальное решение, нужно добавить щепотку своего CSS. Jake Archibald в статье показывает, как добавить эту щепотку CSS и получить хороший select. В статье есть интерактивное демо каждого улучшения и видео для тех, у кого браузер не поддерживает все требуемые фичи. —————————————— Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам. —————————————— Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы
808
6
The Goldilocks customizable select height Относительно недавно браузеры разрешили полностью кастомизировать <select>. Но, как обычно, чтобы получить идеальное решение, нужно добавить щепотку своего CSS. Jake Archibald в статье показывает, как добавить эту щепотку CSS и получить хороший select. В статье есть интерактивное демо каждого улучшения и видео для тех, у кого браузер не поддерживает все требуемые фичи. Проблема 1: picker упирается в край viewport По умолчанию список опций упирается в край экрана, и непонятно — это конец списка или есть что-то ещё. Решение банальное — добавить отступ от края: .custom-select::picker(select) { margin-block-end: 1em; } Но: - в Firefox это просто не работает - в Chrome/Safari margin снизу выглядит плохо, когда picker переворачивается и список выпадает вверх Для Firefox: считаем вручную через calc(100% - var(--viewport-margin)). Chrome & Safari: используем position-try-fallbacks: flip-block, flip-inline, … — при перевороте picker'а margin тоже «переворачивается». margin-block-end сверху становится margin-block-start. Проблема 2: picker становится слишком маленьким У Chrome дефолт min-block-size: 1lh. Если упереть select в край экрана, список сжимается и становится неюзабельным. Решение банальное — поднимаем минимальный размер: .custom-select::picker(select) { min-block-size: 12em; } Но тогда короткий список из пары опций начинает выглядеть странно — появляется пустое пространство. Тут Jake использует расчёт размера на основе контента: .custom-select::picker(select) { min-block-size: calc-size(fit-content, min(size, 12em)); } В Firefox и Safari нет calc-size(), там используется :has() для определения количества элементов. Проблема 3: picker становится слишком большим Picker всегда растягивается на всю возможную высоту. Решение: второй max через calc-size(stretch, …): .custom-select::picker(select) { --max-size: 30em; max-block-size: calc-size(stretch, min(size, var(--max-size))); } Итоговый CSS Итого 5 простых строчек (и около 30, если считать фолбек для браузеров, не поддерживающих эти 5 строчек) для улучшения кастомизированного select: .custom-select::picker(select) { min-block-size: calc-size(fit-content, min(size, 12em)); max-block-size: calc-size(stretch, min(size, 30em)); margin-block-end: 1em; } https://jakearchibald.com/2026/goldilocks-select-height/ #development #css #html #select #web #jakeArchibald
918
7
Skills for coding agents Набор скиллов для coding-агентов от BuilderIO. Наборов скиллов много, но здесь мне понравились /visual-plan и /visual-recap, с помощью которых агент может создать план и отчёт, которые удобно читать и в которых используется канвас с диаграммами, мокапами и всем таким. Выглядит круто. Также есть скиллы для организации группы агентов, но они уже менее интересны. https://github.com/BuilderIO/skills #development #ai #agents #cursor #skills
985
8
eslint-plugin-unicorn Как-то я упустил момент, когда eslint-plugin-unicorn начал активно развиваться. А тем временем там уже больше 300 правил! Правила всякие разные — от специализированных до тех, которые можно использовать в любом проекте. https://github.com/sindresorhus/eslint-plugin-unicorn #development #eslint #javascript #typescript #lint
1 179
9
Why does tsgo use so much memory? Вот и подъехали разборы работы tsgo, на который все мы скоро переедем. На больших проектах он жрёт гигабайты памяти. Автор разбора погонял его на проекте с Next.js и Zod и сделал анализ, куда же уходит память. Короткий ответ: при мультипоточности tsgo создаёт отдельный type checker на каждый поток. У каждого свой state, который не шарится. Также вычисленные типы никогда не освобождаются. При запуске tsgo на 4 потоках 45% памяти уходит на AST, 30% на Checker (400 МБ). При запуске в один поток потребление Checker падает до 50 МБ. У каждого Checker свой state и данные. При запуске tsgo в несколько потоков создаётся несколько Checker, каждый из которых несёт свои данные. Также конструкции Zod вида const emailSchema = z.string().email().min(5).max(120).toLowerCase(); генерируют очень много типов, хотя по итогу нужен только последний. Из хороших новостей: это всё можно оптимизировать и можно ожидать снижение потребления памяти в будущих релизах. https://zackoverflow.dev/writing/why-does-tsgo-use-so-much-memory #development #typescript #tsgo #performance #compiler
1 623
10
Дайджест за 2026-06-15 - 2026-06-19 Deprecating a React component using TypeScript Overload Статья про хитрый способ ввести breaking change в компонент, не создавая ComponentNameV2. Автор использует трюк с TypeScript overloads и @deprecated. ESLint – React – You Might Not Need An Effect ESLint-плагин, который ловит лишние useEffect. Создан по мотивам официальной статьи React You Might Not Need An Effect. Целый набор антипаттернов с конкретными подсказками и ссылками на доку. The Orchestration Tax Addy Osmani рассказывает про «orchestration tax» — налог, который приходится выплачивать, работая с кучей агентов. —————————————— Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам. —————————————— Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы
1 251
11
The Orchestration Tax Addy Osmani рассказывает про «orchestration tax» — налог, который приходится выплачивать, работая с кучей агентов. Переключение контекста не бесплатное — мозг тратит своё мыслетопливо на это переключение. Запускать 20 агентов параллельно — легко. Но переключаться между ними — сложно. Очень быстро устаёшь. Это и есть «orchestration tax». Те, кто занимается архитектурой систем, знают, что 100% утилизация CPU ведёт к задержкам в обработке задач, что в итоге приводит к долгому времени выполнения всех задач. Также работает и наш мозг. Но при этом, запуская 20 агентов и нагружая свою голову на 100%, кажется, что ты очень продуктивен. Но по факту мы путаем перегруженность с продуктивностью. А когда устаёшь, то вместо качественной проверки результата работы агента принимаешь его работу не глядя, что ведёт к низкому качеству итогового решения. Что надо делать, чтобы не попасть в эту ловушку: - Самое важное — не запускать агентов на задачи, требующие вашего внимания, больше, чем вы можете заменеджить - Проверять работу агентов батчами — сразу по нескольку. Проще, чем много раз возвращаться к одной задаче. - Если можно убрать фазу проверки в агента — стоит это сделать. Агенты сами могут запустить тесты, проверить работу приложения и анализировать логи. На этапе старта задачи сразу укажите Definition of Done для задачи, которую агент сможет проверить сам Но главное - развить отдельный навык. Проектировать систему работы с агентами вокруг мысли, что вы - узкое горлышко всей системы. https://addyosmani.com/blog/orchestration-tax/ #development #ai #agents #productivity #engineering
1 195
12
ESLint – React – You Might Not Need An Effect ESLint-плагин, который ловит лишние useEffect. Создан по мотивам официальной статьи React You Might Not Need An Effect. Целый набор антипаттернов с конкретными подсказками и ссылками на доку. Плагин анализирует state, props, refs и их источники, учитывает зависимости effect и пытается держать высокое соотношение полезных срабатываний к шуму. Есть 9 правил: - no-derived-state — derived state в effect вместо вычисления при рендере - no-chain-state-updates — цепочки setState в effect - no-event-handler — effect как event handler через state/props - no-adjust-state-on-prop-change / no-reset-all-state-on-prop-change — сброс state при смене props (вместо key) - no-pass-live-state-to-parent / no-pass-data-to-parent — прокидывание данных наверх через effect - no-external-store-subscription — подписка на внешний store вместо useSyncExternalStore - no-initialize-state — инициализация state в effect Выглядит интересно, надо попробовать. https://github.com/nickjvandyke/eslint-plugin-react-you-might-not-need-an-effect #development #react #eslint #hooks #useeffect #lint
1 316
13
Deprecating a React component using TypeScript Overload Статья про хитрый способ ввести breaking change в компонент, не создавая ComponentNameV2. Автор использует трюк с TypeScript overloads и @deprecated. Что он делает. Есть у вас компонент Card export interface CardProps { title: string; content: string; style?: React.CSSProperties; } const Card = ({title, content, style}: CardProps) => {} Вам нужно сделать новый компонент с тем же интерфейсом. const NewCard = ({title, content, style}: CardProps) => {} При этом вы хотите, чтобы пользователи не автоматически обновляли компонент, а осознанно (ну, допустим, изменение значительное). В этом случае вы делаете враппер export interface NewCardProps extends CardProps { new: true; } function Card(props: CardProps | NewCardProps): React.JSX.Element { if ('new' in props) { return NewCard(props); } return LegacyCard(props); } Все пользователи так и импортируют Card и используют старую реализацию, но надо как-то подсказать пользователям что им надо прокинуть проп new для перехода на новую версию. /* eslint-disable no-redeclare */ /** @deprecated Use Card with "new" prop on it instead */ function Card(props: CardProps): React.JSX.Element; function Card(props: NewCardProps): React.JSX.Element; При таком определении IDE будет отображать использование компонента без пропа new как депрекейтнутное (зачеркивать его). Трюк немного сомнительный, но, вместе с тем, и очень интересный. https://dev.to/mbarzeev/deprecating-a-react-component-using-typescript-overload-2ka #development #react #typescript #components #deprecation #monorepo
1 027
14
Дайджест за 2026-06-08 - 2026-06-12 Bun's unreleased Rust port has 13,365 unsafe blocks. Most can be removed. Сначала Anthropic купили Bun, а затем переписали его с Zig на Rust с помощью Claude Code, но пока не влили. Большое переписывание - большой шитшторм. Быстро вскрылось, что код переписан "плохо" - не rust-way и много unsafe в кодовой базе. Команда Bun опубликовала большой интерактивный аудит всех unsafe-блоков в ещё не выпущенном Rust-порте рантайма. После AI-перевода с Zig на Rust там насчитали 13 365 unsafe — и разобрали каждый: откуда он взялся, можно ли убрать и что для этого нужно. Mitos Oxide Computer выложили в опенсорс Mitos — веб-инструмент для генерации ASCII-арта на основе изображений или gif. Выглядит реально круто. Вставляете картинку или гиф, а экспортируете текст, png или mp4. TypeScript Tips Everyone Should Know Никогда не было и вот опять - читшит с бест практисами по Typescript. 15 простых бест-практисов, которые можно брать в любой проект (или отдать агенту в виде скилла). Т.к. читшит ультра короткий, то приведу примеры из него прямо в посте —————————————— Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам. —————————————— Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы
901
15
TypeScript Tips Everyone Should Know Никогда не было и вот опять - читшит с бест практисами по Typescript. 15 простых бест-практисов, которые можно брать в любой проект (или отдать агенту в виде скилла). Т.к. читшит ультра короткий, то приведу примеры из него прямо в посте Prefer unknown Over any - тут всем всё понятно, unknown безопаснее any Let Type Inference Do the Work - если TS может вывести тип сам, то и не надо его описывать const name = "Ada"; // вместо const name: string = "Ada"; Prefer satisfies Over as - satisfies позволяет проверить на соответствие типу без приведения типов, в отличие от as const routes = { home: "/", about: "/about", } satisfies Record<string, string>; Derive Types From Values Instead of Duplicating Them - получайте типы из значений, а не делайте копию в типах. const roles = ["admin", "user", "guest"] as const; type Role = (typeof roles)[number]; Model Impossible States With Discriminated Unions - делайте некорректные состояния невозможными с помощью Discriminated Unions type State = | { status: "loading" } | { status: "success"; data: User } | { status: "error"; error: Error }; Use Exhaustive Checks With never - при проверках switch/case (да и в других вариантах), в default следует возвращать never. Если вдруг TypeScript поймет, что не все ветвления проверены и можно войти в ветку с never, то TS кинет ошибку function render(state: State) { switch (state.status) { case "loading": return <Spinner />; case "success": return <UserCard data={state.data} />; case "error": return <ErrorMessage error={state.error} />; default: { const exhaustive: never = state; return exhaustive; } } } Use as const for Configuration and Constants - фиксируйте типы конфигов и констант через as const, они будут точнее выведены const theme = { mode: "dark" } as const; Use Type Predicates for Reusable Narrowing function isUser(value: unknown): value is User { return typeof value === "object" && value !== null && "id" in value; } Build New Types From Existing Types - используйте Pick, Omit, Partial, Required и другие type utils для построения производных типов type UserPreview = Pick<User, "id" | "name">; Validate External Data at Runtime - TypeScript не проверяет данные из внешнего мира. Валидируйте их на границе с API const UserSchema = z.object({ id: z.string(), name: z.string(), }); Avoid enum in Most Cases - union проще рефакторить, сериализовать и приносит меньше сюрпризов в рантайме, чем Enum. const roles = ["admin", "user"] as const; // вместо enum Role { Admin, User } Prefer Generics That Infer Automatically - если generic может сам вывести тип — так и делайте. Хороший API не заставляет писать тип вручную getData(userSchema); // вместо getData<User>(userSchema) Enable Strict Compiler Options - удивительно, что в конце списка :). Включите строгий режим проверок. Learn Template Literal Types - используйте строковые шаблоны в типах. type Route = `/api/${string}`; "Type-Safe" Does Not Mean "Runtime Safe" - даже если вы используете строгий TS, у вас нет any, ts-expect-error и всё чётко, это не гарантирует, что в рантайме у вас не будет ошибок. https://github.com/AllThingsSmitty/typescript-tips-everyone-should-know #development #typescript #javascript #best-practices #cheatsheet
1 170
16
Mitos Oxide Computer выложили в опенсорс Mitos — веб-инструмент для генерации ASCII-арта на основе изображений или gif. Выглядит реально круто. Вставляете картинку или гиф, а экспортируете текст, png или mp4. Поиграться можно здесь https://mitos.shared.oxide.computer/ https://github.com/oxidecomputer/mitos #development #oxide #ascii #tools #open-source
1 041
17
Bun's unreleased Rust port has 13,365 unsafe blocks. Most can be removed. Сначала Anthropic купили Bun, а затем переписали его с Zig на Rust с помощью Claude Code, но пока не влили. Большое переписывание - большой шитшторм. Быстро вскрылось, что код переписан "плохо" - не rust-way и много unsafe в кодовой базе. Команда Bun опубликовала большой интерактивный аудит всех unsafe-блоков в ещё не выпущенном Rust-порте рантайма. После AI-перевода с Zig на Rust там насчитали 13 365 unsafe — и разобрали каждый: откуда он взялся, можно ли убрать и что для этого нужно. Важно: версию на Rust ещё не влили. Главный вывод из отчёта: 13 365 unsafe — это очень много, но большинство из них (~9 300) можно перевести в safe. Остальные unsafe останутся, в основном это FFI и работа с C/C++. Сам отчёт просто бомбический: удобно смотреть, классно выглядит, полностью основан на данных и показывает, откуда берутся эти unsafe. Но самый кайф — хороший пример инженерной работы: всё подсчитано, сделан анализ, выводы, показаны детали, которые повлияли на выводы. https://bun.com/bun-unsafe-audit #development #bun #rust #unsafe #audit
1 213
18
ужин?
1
19
Дайджест за 2026-05-18 - 2026-05-22 spawn-agent Библиотека, использующая Vercel AI SDK для запуска локальных AI-агентов на компьютере через Agent Client Protocol. Поддерживает Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode, Factory Droid, Pi. portless Утилита от Vercel Labs, которая открывает урлы вида http://localhost:3000 на именованных доменах .localhost. Например, вместо http://localhost:3000 можно открывать https://myapp.localhost. Из коробки поддерживает HTTPS и HTTP/2. Warp — открыли исходный код Warp, терминал с Rust, который, как и Zed, прошел большой путь от "мы просто очень быстрый терминал" через "Мы терминал++ - следующее поколение терминалов с крутыми фичами" до "мы теперь AI IDE". Warp выложили исходники в опенсорс. —————————————— Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам. —————————————— Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы
1 467
20
Warp — открыли исходный код Warp, терминал с Rust, который, как и Zed, прошел большой путь от "мы просто очень быстрый терминал" через "Мы терминал++ - следующее поколение терминалов с крутыми фичами" до "мы теперь AI IDE". Warp выложили исходники в опенсорс. Это круто, т.к. лично я считаю, что warp - самый удобный терминал для работы. Банальный textarea, который ведет себя также как редактирование кода в IDE, выводит опыт работы с терминалом на следующий уровень. https://github.com/warpdotdev/warp #development #warp #terminal #open-source #rust #ai
1 477