Промты для TypeScript-разработки: 11 сценариев от типизации API до деплоя Next.js и Node.js
TypeScript давно перестал быть «просто надстройкой над JavaScript» — сегодня это стандарт для серьёзных проектов на React, Next.js и Node.js. Но чем сложнее типизация, тем больше времени уходит на рутину: описать интерфейсы API, сгенерировать discriminated union для состояний, разобраться с generics в утилите. Именно здесь LLM экономят часы, если давать им точные промты, а не расплывчатые «напиши мне код».
Ниже — 11 проверенных сценариев, которые я использую в реальных проектах. Для каждого: задача, готовый промт, пример и на что смотреть в ответе. Все примеры совместимы с TypeScript 5.x, React 19, Next.js 15 (App Router) и Node.js 22.
1. Типизация ответа внешнего API без ручного описания
Задача: есть JSON-ответ, нужны точные интерфейсы и zod-схема для рантайм-валидации.
Промт:
Ты senior TypeScript-инженер. Ниже JSON-ответ API. Сгенерируй:
1) TypeScript-интерфейсы с readonly-полями
2) zod-схему, точно повторяющую типы
3) type guard isUser(data: unknown): data is User
Не используй any. Опциональные поля помечай ?.
JSON: {...}
Пример: для ответа GitHub /users/:login модель выдаёт interface User { readonly login: string; readonly id: number; ... } и const UserSchema = z.object({...}). Дальше UserSchema.parse(json) даёт и тип, и валидацию. Сверяйте поля created_at — они должны быть string, а не Date, иначе получите ложную уверенность.
2. Генерация discriminated union для состояний UI
Задача: заменить булевы флаги isLoading / isError / data на типобезопасное состояние.
Промт:
Спроектируй discriminated union для состояния асинхронной загрузки в React.
Требования: состояния idle, loading, success, error; error хранит Error;
success хранит data. Напиши функцию reducer и пример использования в компоненте.
Результат — `type State
|{status:'loading'}|{status:'success';data:T}|{status:'error';error:Error}. Компилятор сам не даст обратиться кdataбез проверкиstatus`. Это ловит целый класс багов ещё до рантайма.
3. Server Actions в Next.js App Router
Задача: форма создания сущности без REST-роутов.
Промт:
Next.js 15, App Router, TypeScript. Создай server action createPost(formData: FormData)
с валидацией через zod, revalidatePath('/posts') и возвратом типизированного
результата {ok:true}|{ok:false;errors:Record<string,string[]>}.
Покажи клиентский компонент с useActionState.
useActionState — реальный хук React 19 (ранее useFormState из react-dom). Проверьте, что в ответе нет 'use server' внутри клиентского файла — это классическая ошибка генерации.
4. Типизация Route Handlers и params
Задача: эндпоинт /api/users/[id] с корректными типами.
Промт:
Сгенерируй route handler GET в app/api/users/[id]/route.ts (Next.js 15).
Во второй аргумент params приходит Promise — учти это. Верни 404 при отсутствии,
типизируй ответ как NextResponse<User | {error:string}>.
В Next.js 15 params стал асинхронным (await params) — это одно из ключевых изменений, о котором модель без подсказки часто «забывает» и генерирует код под 14-ю версию.
5. Generic-утилита с сохранением литеральных типов
Задача: функция, которая не теряет literal types.
Промт:
Напиши generic-функцию pick<T, K extends keyof T>(obj:T, keys: readonly K[]): Pick<T,K>.
Объясни, почему без as const массив ключей расширяется до string[].
Приведи пример, где это ломает вывод типа.
Такой промт хорош тем, что просит не только код, но и объяснение — вы учитесь, а не просто копируете.
6. Оптимизация tsconfig под монорепозиторий
Задача: ускорить сборку и включить строгие проверки.
Промт:
Предложи tsconfig.json для монорепо на pnpm workspaces (Next.js + Node.js пакет).
Включи: strict, noUncheckedIndexedAccess, project references, composite.
Объясни, какие опции замедлят сборку и как их компенсировать.
noUncheckedIndexedAccess — реальная опция, которая делает arr[0] типом T | undefined. Полезно, но требует рефакторинга — модель должна предупредить об этом.
7. Настройка ESLint + typescript-eslint flat config
Промт:
Сгенерируй eslint.config.js (flat config) для TypeScript + React + Next.js.
Подключи typescript-eslint, react-hooks, запрети any через правило
@typescript-eslint/no-explicit-any. Добавь комментарии к каждому блоку.
Flat config — актуальный формат с ESLint 9. Правила typescript-eslint действительно существуют и активно поддерживаются.
8. Миграция JavaScript-модуля на TypeScript
Промт:
Переведи этот JS-модуль на TypeScript. Не меняй поведение. Добавь типы для всех
параметров и возвращаемых значений, замени require на import, укажи места,
где тип unknown честнее, чем any. Вот код: {...}
Ключевая фраза — «не меняй поведение». Без неё модель любит заодно отрефакторить логику, что ломает тесты.
9. Типизация конфигурации через satisfies
Задача: конфиг с автокомплитом, но без потери конкретных значений.
Промт:
Покажи, как через оператор satisfies типизировать объект конфигурации так,
чтобы сохранялись литеральные значения ключей, но проверялась структура.
Сравни с вариантом через аннотацию типа.
satisfies (TS 4.9) — реальный оператор. Он проверяет соответствие типу, но не расширяет выведенный тип — удобно для роутов и i18n-словарей.
10. Тесты на Vitest с типами
Промт:
Напиши тесты на Vitest для функции calculateDiscount. Используй describe/it/expect,
добавь type-level тесты через expectTypeOf. Покажи кейсы с граничными значениями.
expectTypeOf — настоящий API Vitest для проверки типов в тестах. Это редкость в генерациях, но очень полезно в библиотеках.
11. Деплой и CI: GitHub Actions для Next.js
Промт:
Сгенерируй .github/workflows/ci.yml для Next.js + TypeScript.
Шаги: pnpm install --frozen-lockfile, tsc --noEmit, eslint, vitest run, next build.
Кэшируй pnpm-store. Объясни, почему tsc --noEmit быстрее полной сборки.
tsc --noEmit действительно не пишет файлы и часто используется в CI как быстрая проверка типов до тяжёлого next build.
Как использовать эти промты правильно
Во-первых, всегда указывайте версии: Next.js 15, React 19, TypeScript 5.x — иначе получите код под устаревший API. Во-вторых, добавляйте фразу «не используй any без объяснения» — это заметно повышает качество типов. В-третьих, просите объяснять решения: код без понимания в проект лучше не мержить.
Официальные источники, на которые стоит опираться при проверке ответов модели: TypeScript Handbook, Next.js Docs, React 19 useActionState, typescript-eslint.
Эти 11 сценариев покрывают типовой день fullstack-разработчика на TypeScript: от типизации API до деплоя. Начните с двух-трёх промтов, которые закрывают вашу самую частую боль, и постепенно соберите личную библиотеку — она будет работать точнее любой универсальной подборки.
```
Комментарии