TypeScript в Next.js как система контрактов, а не типизация ради типизации
Когда разработчик начинает писать на Next.js с TypeScript, первая реакция часто довольно холодная. Вместо того чтобы двигаться быстрее, он начинает чаще видеть ошибки. Где-то не совпал shape объекта, где-то строка не подходит в более узкий тип, где-то TypeScript напоминает, что значение может быть undefined. На этом...
Когда разработчик начинает писать на Next.js с TypeScript, первая реакция часто довольно холодная. Вместо того чтобы двигаться быстрее, он начинает чаще видеть ошибки. Где-то не совпал shape объекта, где-то строка не подходит в более узкий тип, где-то TypeScript напоминает, что значение может быть undefined. На этом месте легко сделать неправильный вывод. Кажется, что TS просто добавляет трение и требует больше служебного кода.Обычно проблема не в TypeScript, а в способе мышления. Если использовать его как набор аннотаций поверх уже написанного кода, пользы действительно немного. Но если смотреть на типы как на систему контрактов между слоями приложения, картина меняется. Особенно в Next.js App Router, где у нас постоянно есть границы server и client, внешний ввод из URL, формы, мутации и разные состояния интерфейса.В этот момент TypeScript перестаёт быть типизацией ради типизации. Он начинает отвечать на более важный вопрос: какие состояния в проекте вообще допустимы, а какие не должны пройти дальше границы. По такой модели я выстроил один из своих проектов Workbench. Не начинать с мысли давайте везде поставим типы, а начинать с мысли где у нас проходит граница, что в неё входит и что из неё может выйти. После этого многие решения в коде становятся почти очевидными.
Связанные теги
Компании и люди
Линия сюжета
Habr
Последние материалы и связанный контекст по теме Habr.
Habr
Последние материалы и связанные ссылки по теме Habr.
Next
Последние материалы и связанный контекст по теме Next.
Next.js
Последние материалы и связанные ссылки по теме Next.js.
Next.js
Последние материалы и связанный контекст по теме Next.js.
Продолжить следить за темой
Переходите к связанным материалам, страницам сущностей и активным линиям сюжета.
Почему rollback на ext4 — боль, и как я решил это через rsync
Я не собирался делать этот проект.Просто однажды сломал систему — и понял, что rollback на ext4 не такая простая вещь, как кажется.В итоге собрал своё решение на rsync: быстрый ...
Нарратив, ачивки и кабинет геймификации: как мы принимаем продуктовые решения на основе голоса клиента
Привет! Меня зовут Потешина Елена, я старший UX‑исследователь геймификации в «БКС Мир инвестиций». С января лидирую исследования в 3 продуктовых командах, основная — Геймификаци...
ruGPT3XL идёт в качалку / поднимаем контекст до 8k
Это продолжение предыдущей публикации про реставрацию ruGPT3XL. Для тех кто не читал, кратенько, я конвертировал древний Megatron-LM чекпоинт в HuggingFace-формат, залил веса на...
Книга: «Интервью по машинному обучению. 151 вопрос от FAANG»
Привет, Хаброжители! Хотите построить карьеру в области ML? Воспользуйтесь опытом и советами Пенга Шао, чтобы научиться тому, как успешно пройти собеседование по машинному обуче...
Kawai-Focus 2.5: сборка и упаковка Tauri-приложения (Windows + Arch Linux, AUR)
Сегодня я займусь совершенно неизведанной и, как мне кажется, мало изученной многими линуксоидами темой — сборкой Tauri-приложения под Windows. Почему мало изученной? Потому что...
Тимлид в эпоху ИИ: кто он и почему одного крутого кода недостаточно
Рано или поздно каждый сеньор просыпается с мыслью: хочу быть тимлидом. Ну или нет. Но если вас эта мысль все-таки посетила... А оно вам надо?
Рекламный слот
Встроенный блок в статье
Зарезервированный партнерский слот для релевантных инструментов, сервисов и аккуратных редакционных интеграций.
Похожие статьи
Еще материалы, которые пересекаются по тегам, источнику или категории.
Почему rollback на ext4 — боль, и как я решил это через rsync
Я не собирался делать этот проект.Просто однажды сломал систему — и понял, что rollback на ext4 не такая простая вещь, как кажется.В итоге собрал своё решение на rsync: быстрый ...
Нарратив, ачивки и кабинет геймификации: как мы принимаем продуктовые решения на основе голоса клиента
Привет! Меня зовут Потешина Елена, я старший UX‑исследователь геймификации в «БКС Мир инвестиций». С января лидирую исследования в 3 продуктовых командах, основная — Геймификаци...
ruGPT3XL идёт в качалку / поднимаем контекст до 8k
Это продолжение предыдущей публикации про реставрацию ruGPT3XL. Для тех кто не читал, кратенько, я конвертировал древний Megatron-LM чекпоинт в HuggingFace-формат, залил веса на...
Книга: «Интервью по машинному обучению. 151 вопрос от FAANG»
Привет, Хаброжители! Хотите построить карьеру в области ML? Воспользуйтесь опытом и советами Пенга Шао, чтобы научиться тому, как успешно пройти собеседование по машинному обуче...
Еще материалы от Habr
Свежие публикации и продолжение темы от той же редакции.
Почему rollback на ext4 — боль, и как я решил это через rsync
Я не собирался делать этот проект.Просто однажды сломал систему — и понял, что rollback на ext4 не такая простая вещь, как кажется.В итоге собрал своё решение на rsync: быстрый ...
Нарратив, ачивки и кабинет геймификации: как мы принимаем продуктовые решения на основе голоса клиента
Привет! Меня зовут Потешина Елена, я старший UX‑исследователь геймификации в «БКС Мир инвестиций». С января лидирую исследования в 3 продуктовых командах, основная — Геймификаци...
ruGPT3XL идёт в качалку / поднимаем контекст до 8k
Это продолжение предыдущей публикации про реставрацию ruGPT3XL. Для тех кто не читал, кратенько, я конвертировал древний Megatron-LM чекпоинт в HuggingFace-формат, залил веса на...
Книга: «Интервью по машинному обучению. 151 вопрос от FAANG»
Привет, Хаброжители! Хотите построить карьеру в области ML? Воспользуйтесь опытом и советами Пенга Шао, чтобы научиться тому, как успешно пройти собеседование по машинному обуче...