Все потоки
Поиск
Написать публикацию
Обновить
26.44

TypeScript *

Cтрого типизированная надстройка для JavaScript

Сначала показывать
Порог рейтинга
Уровень сложности

Хватит валидировать CLI — сначала лучше распарсите код как следует

Время на прочтение7 мин
Количество просмотров1.7K

Есть за мной такой грешок: если какая-то проблема мне долго досаждает, я в конце концов пишу библиотеку, которая её решает. На сей раз такая история возникла с кодом для валидации CLI.

Смотрите, я немало времени уделяю чтению кода, который написали другие люди. Это код опенсорсных проектов, всякий материал по работе, а также код из случайных репозиториев с GitHub, на которые, бывает, наткнёшься в два часа ночи. Причём, я то и дело замечаю одну и ту же проблему: в любом инструменте CLI найдётся одинаковый уродливый валидационный код, запрятанный поглубже. Знаете, в таком роде:

Читать далее

Новости

Пишем высокопроизводительный вьюпорт для мессенджера

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров964

В данной статье будет предоставлена детальная информация по реализации высокопроизводительного вьюпорта мессенджера на Angular, который обеспечит высокую и плавную скорость работы и низкое потребление ресурсов с применением инструмента виртуализированных списков ng-virtual-list. А также представлен порт на React.

Читать далее

Zod-valid. Безопасная валидация API данных

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.4K

Zod-valid — это Typescript библиотека, зависимая от другой известной библиотеки zod, для безопасной валидации API данных. API редко гарантирует идеальные данные: поля могут быть пропущены, типы не совпадать, структуры меняться. Без проверки этих данных приложение рискует вызвать runtime-ошибки или ломать бизнес-логику. Валидировать данные заранее — значит обеспечить предсказуемое поведение и защитить приложение от неожиданных значений.

Читать далее

Clean Fury: эволюция одного Node.js сервиса

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1.5K

Эта статья — история эволюции. Она о том, как простое желание купить билеты в театр прошло путь от однофайлового скрипта на несколько строк до полноценного сервиса с Clean Architecture, CI/CD и деплоем на VPS. Я не стану показывать пошаговый гайд по программированию, а разберу на примерах, какие боли на каждом этапе заставляли меня усложнять архитектуру, и какие архитектурные решения эти боли закрывали. Это практический гайд по принятию решений для ваших пет-проектов.

Читать далее

Записки одного QA. Часть 2: Советы и приёмы в автотестах на Playwright

Уровень сложностиПростой
Время на прочтение38 мин
Количество просмотров2.3K

Записки одного QA. Часть 2. Немного пожеланий и советов по автотестам на Playwright

В этой части я собрала практические советы и наблюдения из опыта работы с автотестами в Playwright, подходы, которые упрощают поддержку и делают рефакторинг легче. Материал является продолжением первой части и дополняет её новыми деталями и примерами.

Читать далее

Пишем переиспользуемые инпуты для реактивных форм с ControlValueAccessor + NgControl/Injector

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров479

ControlValueAccessor - это то, что отделяет профессиональную дизайн‑систему от набора костылей. Но как грамотно связать его с состоянием контрола (invalid, touched), не создав циклических зависимостей? Эта статья - не просто «ещё один туториал». Это пошаговое руководство по созданию универсального инпута на современном стеке: SignalsOnPush и безопасный инжект NgControl. Разбираем раз и навсегда.

Освоить CVA раз и навсегда

Claude Code: субагенты

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.7K

Субагенты в Claude Code — обзор вопроса и немного деталей.

Расскажу про одну из самых примечательных фич Claude Code — инструмент Суб‑Агентов (Sub‑Agents), чем он отличается от обычного Task, и как его можно использовать для создания своих систем на базе ИИ агентов.

Читать далее

Конструктор лендингов: как мы научились делать сайты без разработчиков

Время на прочтение4 мин
Количество просмотров8.5K

У нас в Точка Банк много продуктов, для которых нужны SEO-лендинги: онлайн бухгалтерия, эквайринг, электронный документооборот. Создание одного сайта — это несколько недель работы с участием редактора, дизайнера, разработчика, тестировщика, верстальщика. Не страшно, если нужен один сайт. Но когда их много, на их создание уходит колоссальное количество времени. 

Меня зовут Василий Полосухин — я фронтовый техлид в Точка Банк. В статье рассказываю, как мы сделали визуальный конструктор страниц и научились собирать сайты без кода.

Читать далее

Пет-проект с AI-помощником: мой первый опыт вайбкодинга

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров3.5K

Как и многие начинающие разработчики, я давно мечтал сделать свой первый pet-проект — чтобы почувствовать себя «настоящим программистом» и перестать бояться собеседований. В итоге решился: буду писать веб-приложение для личных заметок.

На самом деле я не совсем новичок. Раньше у меня уже были попытки освоить разные языки программирования, но дальше пары строчек кода дело редко заходило. Умение «гуглить правильно» и искать ответы на StackOverflow пока давалось тяжело, поэтому довести что-то до результата было сложно.

В этот раз я решил пойти по трендам и подключить в процесс AI. Спасибо Хабру, что в нужный момент подкинул статью про Koda. С неё и начался мой эксперимент. А команде Koda хочу выразить респект за то, что всё бесплатно.

Читать далее

Safe-fetch 1.0: от библиотеки к экосистеме за 72 часа

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров610

Продолжение статьи о safe-fetch — библиотеке без try/catch для HTTP.

Через день после первой публикации произошла эволюция: stable релиз 1.0 + экспериментальный адаптер для React Query.

Рассказываю, как фидбек сообщества превратил простую обертку в экосистему с монорепо.

Что нового в релизе

Не доверяй и проверяй, или как я валидировал ссылку в JavaScript

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров2.6K

Всем привет! На связи Сергей, ведущий фронтенд-разработчик в команде привлечения Центрального университета. Расскажу историю, как валидировал ссылку и попал впросак. Я использовал браузерный URL API для своих целей и думал, что знаю, как он работает. И прежде чем кидать в меня помидоры, как в разработчика, который не читает документацию, дайте шанс рассказать свою историю.

Читать далее

Кратко о вариантности с примерами на TypeScript

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.1K

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

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

Читать далее

It's a match

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров5.6K

С ростом сложности фронтенда разработчики начали уделять больше внимания архитектуре. Кто-то предпочитает «чистую», кто-то — её производные, например, FSD. В той или иной степени этот вопрос волнует многих. В данной статье я предлагаю присмотреться повнимательнее к аспекту, который часто остаётся в тени при обсуждении архитектуры, — к маршрутизации.

Давайте вспомним как мы строим роутинг в наших приложениях. В примере ниже – react-router-dom, но в других фреймворках/библиотеках все примерно также:

Читать далее

Ближайшие события

Настройка ESLint и Prettier в веб-приложении на Next.js и TypeScript

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.9K

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

В данной статье мы рассмотрим пошаговую настройку ESLint и Prettier на примере нашего веб-приложения, построенного на Next.js и TypeScript.

Читать далее

Обработка исключений на JS – неудобная, но не безнадежная

Время на прочтение5 мин
Количество просмотров4.1K

Ситуация: пишешь код на JS, хочешь обработать исключение, пробрасываешь throw, ловишь его с помощью try‑catch. Но добавим нюанс: пусть это нужно сделать для setTimeout. Эта функция использует окружения браузера — не JS‑функция, асинхронная.

Загвоздка: catch не сможет поймать ошибку.

Этот пример — одна из нескольких особенностей JS, из‑за которых я считаю обработку исключений «из коробки» на этом языке неудобной. Но есть и хорошие новости — для JS существуют альтернативные способы работы с исключениями, с которыми дела обстоят получше; например, паттерн «контейнерный тип».

Давайте разбираться.

Читать далее

Календарь домашних тренировок — 10 улучшений в пет-проекте

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.3K

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

Самим приложением пользуюсь регулярно. На главной странице для незарегистрированных пользователей в качестве примера как раз показывается моя статистика. Помимо меня есть ещё 53 зарегистрированных пользователя с подтверждённым email.

https://github.com/dergunovs/fit - исходный код приложения
https://vkvideo.ru/playlist/15313879_11 - видео про разработку

Frontend: Typescript, Vite, Vue, Tanstack Query, Vitest, Vue I18n, Tauri
Backend: Typescript, Fastify, Mongoose, MongoDB, Swagger

Публикация приложения в RuStore

С помощью Tauri добавил генерацию формата APK. Зарегистрировался в RuStore в качестве разработчика, заполнил поля с описанием, сделал скриншоты. Модерация прошла очень быстро. Теперь приложение можно удобно скачивать и обновлять. Сам APK файл весит около 10 мегабайт. За 4 месяца с момента публикации в RuStore оттуда было 65 установок приложения.

Читать далее

Хватит писать try/catch вокруг fetch: история о том, как я устал ловить ошибки

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров19K

Каждый фронтендер знает эту боль: пишешь запрос через fetch - и автоматически добавляешь try/catch. Где-то ловишь TypeError, где-то 500-й статус, где-то подвисший запрос с AbortController. В итоге половина кода в проекте - это обработка ошибок, а не бизнес-логика.

Я прожил с этим годами. Чем больше становился проект, тем больше росла копипаста: таймауты, ретраи, проверки на res.ok, костыли для разных браузеров. Одно и то же, снова и снова.

И вот в какой-то момент я понял: проблема не в том, что ошибки случаются. Проблема в том, что сам fetch вынуждает нас ловить их вручную, каждый раз, в каждом запросе.

Так появилась библиотека @asouei/safe-fetch. Маленькая (3kb), без зависимостей, но с тем, чего нет у самого fetch: общий таймаут, умные ретраи, нормализованные ошибки и поддержка Retry-After.

🌟 Библиотека добавлена в Awesome TypeScript — один из крупнейших мировых списков лучших TypeScript-проектов

Как я решил проблему

Пишем геймтон на nodejs

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров1.9K

Сегодня мы разработаем с 0 собственный геймтон и запустим соревнования среди хабравчан и всех желающих just for fun. А также дадим возможность запустить свой геймтон локально по своим правилам Под катом вас ждет разработка геймтона на стеке nodejs + prisma + vuejs + fastify. А также пример разработки фулстек приложения с различными тонкостями построения API.

Читать далее

Как мне надоело создавать файлы и папки

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.1K

Рассуждаю о проблеме регулярного создания файлов и о том, как поддержать архитектуру и автоматизировать рутину.

Написал утилиту на Go для генерации структур файлов по шаблонам, которая, думаю, будет полезна многим.

Читать далее

Boolean — плохой флаг для данных

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров27K

Мы все видели и использовали поля типа boolean в базах данных как часть структуры данных.
На первый взгляд это удобно: два значения — «да» или «нет», просто и понятно.

Например, у пользователя может быть флаг is_active, который показывает, включён аккаунт или нет, или поле is_deleted, которое используется как мягкое удаление. Такие поля встречаются повсюду.

Но на практике хранение boolean в базе данных как элемента модели часто приводит к проблемам.

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

Читать далее
1
23 ...