Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 235новых вакансий за сутки·93 897вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 277
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 131
  • Облачные технологии14 071
  • QA вакансии3 448
  • Backend вакансии2 116
  • Инженер данных1 783
  • Продакт-менеджер1 222

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии990
  • AI вакансии951
  • Frontend вакансии749
  • Mobile вакансии44

По стеку

  • Go8 685
  • Java6 537
  • Node.js2 024
  • .NET1 723
  • Kotlin1 612
  • Rust1 462
  • C#710
  • PHP682
  • C++574

DevOps и инфраструктура

  • Kubernetes7 766
  • DevOps вакансии6 046
  • Linux-инфраструктура5 493
  • Terraform / IaC4 271
  • CI/CD3 241
  • Мониторинг и Observability1 790
  • SRE564
  • Кибербезопасность445

Аналитика и данные

  • Data Scientist1 120
  • Бизнес-аналитик913
  • Аналитик данных834
  • Системный аналитик150

Другие направления

  • Проджект-менеджер600
  • UI/UX дизайн143
  • Ручное тестирование14

По регионам

  • Вакансии в США44 437
  • Вакансии в Европе23 855
  • Вакансии в Канаде4 483
  • Работа в России3 904

По формату

  • Удалённые вакансии75 212
  • Релокация в США44 436
  • Гибридная работа12 388
  • Офисная работа7 092

По уровню

  • Senior вакансии41 717
  • Middle вакансии20 190
  • Junior вакансии6 562

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме tRPCВсе вопросы
tRPCMiddleТеория

Что такое tRPC и какую проблему он решает? Как достигается сквозная типобезопасность (end-to-end type safety)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

tRPC — это фреймворк для создания типобезопасных API на TypeScript без генерации схем или кодогенерации. Тип AppRouter экспортируется с сервера и импортируется на клиенте как import type, что даёт полный вывод типов без рантайм-оверхеда.

Как достигается end-to-end type safety

Механизм основан на трёх компонентах:

  • Сервер: роутер с типизированными процедурами через Zod-схемы
  • Тип AppRouter: экспортируется из серверного файла как TypeScript-тип
  • Клиент: параметризуется этим типом через дженерик
// server/router.ts
import { initTRPC } from '@trpc/server';
import { z } from 'zod';

const t = initTRPC.create();

export const appRouter = t.router({
  greeting: t.procedure
    .input(z.object({ name: z.string() }))
    .query(({ input }) => {
      return { message: `Hello, ${input.name}!`, timestamp: new Date() };
    }),

  createUser: t.procedure
    .input(z.object({
      email: z.string().email(),
      role: z.enum(['admin', 'user']),
    }))
    .mutation(async ({ input }) => {
      // Сохраняем в БД...
      return { id: crypto.randomUUID(), ...input };
    }),
});

// Экспортируем только ТИП — не серверный код!
export type AppRouter = typeof appRouter;
// client/trpc.ts
import { createTRPCReact } from '@trpc/react-query';
import { httpBatchLink } from '@trpc/client';
import type { AppRouter } from '../server/router'; // только тип!

export const trpc = createTRPCReact<AppRouter>();

export const trpcClient = trpc.createClient({
  links: [httpBatchLink({ url: '/api/trpc' })],
});
// components/Greeting.tsx
import { trpc } from '../client/trpc';

export function Greeting() {
  // TypeScript знает: input = { name: string }, data = { message: string, timestamp: Date }
  const { data } = trpc.greeting.useQuery({ name: 'Alice' });

  // Ошибка компиляции: 'typo' не существует в AppRouter
  // trpc.typo.useQuery();

  return <p>{data?.message}</p>;
}

Что такое tRPC

tRPC (TypeScript Remote Procedure Call) — библиотека для создания API, при которой сервер и клиент написаны на TypeScript и находятся в одном monorepo. Клиент получает полную типизацию серверных процедур — входных параметров, типов ответов и ошибок — без REST-спецификаций, без OpenAPI-схем, без GraphQL SDL и без кодогенерации.

Какую проблему решает

В классическом REST API типы между клиентом и сервером синхронизируются вручную или через кодогенерацию из схем. При изменении серверного эндпоинта клиент узнаёт об этом только в рантайме. tRPC устраняет этот разрыв: если серверная процедура изменила сигнатуру, TypeScript немедленно покажет ошибку в клиентском коде при компиляции.

Как работает TypeScript без рантайм-оверхеда

Ключевой момент: import type { AppRouter } — это директива TypeScript, которая полностью удаляется при компиляции. В рантайме клиент не знает ничего о серверной реализации. Типы работают только на уровне TypeScript Language Server и при сборке — никакой рефлексии, никаких дополнительных запросов.

Подводные камни

  • tRPC работает только для TypeScript monorepo: клиент и сервер должны иметь доступ к одному типу AppRouter. Для отдельных сервисов на разных языках нужен другой подход.
  • Большой AppRouter с сотнями процедур может замедлить TypeScript Language Server — разбивайте на модули через mergeRouters.
  • tRPC не заменяет REST для публичных API: сторонние клиенты (мобильные приложения, внешние сервисы) не могут использовать TypeScript-типы. Для публичного API нужен OpenAPI.
  • Zod-валидация выполняется в рантайме на каждый запрос — сложные схемы могут влиять на производительность при высокой нагрузке.
  • Ошибки типов в tRPC иногда трудно читать: дженерики глубоко вложены, сообщения об ошибках могут быть длинными. Выделяйте типы в именованные переменные для лучшей диагностики.
  • Нет встроенной поддержки версионирования API — при breaking changes все клиенты обновляются одновременно. Для постепенной миграции используйте параллельные роутеры.

Частые вопросы на собеседовании

  • Чем tRPC отличается от REST и GraphQL? Когда стоит выбрать tRPC вместо них?
  • Как реализовать защищённые процедуры (protected procedures) с помощью middleware и context?
  • Как добавить валидацию входных данных к процедурам tRPC с помощью Zod?
  • В каких типах frontend-проектов tRPC даёт реальный выигрыш, а где будет избыточен или неудачен?

Типичные ошибки

  • Смешивать «tRPC» с похожим механизмом без критерия выбора.
  • Игнорировать риск: неверно оценить границы применения темы «tRPC» и получить хрупкое решение.
  • Показывать только синтаксис и не объяснять поведение в runtime или сборке.

Что проверяет интервьюер

  • Объясняет сквозная типобезопасность между серверным router и клиентским вызовом без отдельной схемы API.
  • Показывает на примере, как работает: сервер экспортирует тип AppRouter, клиент импортирует только тип и получает inference для input, output и errors без code generation.
  • Называет production-нюанс и граничный случай для темы «tRPC».

Как вы знаете этот вопрос?

Проверить себя по теме tRPC →

Источники

  • https://trpc.io/docs
  • https://trpc.io/docs/server/routers
←Предыдущий вопросЧто такое router в tRPC и как определять процедуры (procedures)?Следующий вопрос→Что такое тип `AppRouter` и как его экспортировать для использования на клиенте?

Связанные темы

tRPCapi-designtype-safety