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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

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

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

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

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

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

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

Как Prisma Client обеспечивает типобезопасность? Как генерируются типы?

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

Prisma генерирует TypeScript-типы из schema.prisma командой npx prisma generate. Типы аргументов (UserCreateInput) и результатов автоматически учитывают select/include, обеспечивая полную статическую типобезопасность.

Пример схемы и сгенерированных типов

// prisma/schema.prisma
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id       Int    @id @default(autoincrement())
  title    String
  author   User   @relation(fields: [authorId], references: [id])
  authorId Int
}
import { PrismaClient, Prisma } from '@prisma/client';

const prisma = new PrismaClient();

// TypeScript знает, что result: User
const user = await prisma.user.findUnique({
  where: { email: 'alice@example.com' },
});
// user: { id: number; email: string; name: string | null } | null

// select сужает тип до выбранных полей
const userWithName = await prisma.user.findUnique({
  where: { id: 1 },
  select: { id: true, name: true },
});
// userWithName: { id: number; name: string | null } | null

// include добавляет связанные данные к типу
const userWithPosts = await prisma.user.findUnique({
  where: { id: 1 },
  include: { posts: true },
});
// userWithPosts: (User & { posts: Post[] }) | null

Типобезопасность Prisma Client

Prisma генерирует полностью типизированный клиент на основе вашей схемы (schema.prisma). Генерация запускается командой npx prisma generate и создаёт TypeScript-типы в node_modules/@prisma/client (или в кастомном output-пути).

Как работает генерация типов

Prisma CLI читает prisma/schema.prisma и генерирует:

  • Интерфейсы моделей (User, Post, …)
  • Типы аргументов для каждого метода (UserCreateInput, UserWhereUniqueInput, …)
  • Типы результатов с учётом select и include
  • Enum-типы, соответствующие enum в схеме

Утилитарные типы Prisma

// Тип для создания пользователя
type CreateUserInput = Prisma.UserCreateInput;
// { email: string; name?: string | null; posts?: PostCreateNestedManyWithoutAuthorInput }

// Получить тип результата произвольного запроса
const userWithPostsQuery = Prisma.validator<Prisma.UserDefaultArgs>()({
  include: { posts: true },
});
type UserWithPosts = Prisma.UserGetPayload<typeof userWithPostsQuery>;
// Полный тип: User & { posts: Post[] }

// Для функций, принимающих частичные данные
async function updateUser(id: number, data: Prisma.UserUpdateInput) {
  return prisma.user.update({ where: { id }, data });
}

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

  • После любого изменения schema.prisma нужно вручную запустить npx prisma generate — типы не обновляются автоматически.
  • В CI/CD шаг prisma generate должен идти до tsc, иначе типы будут устаревшими.
  • Если используется кастомный output в генераторе, импортировать нужно из этого пути, а не из @prisma/client.
  • select: { id: true } исключает все остальные поля из типа — обращение к result.email будет ошибкой компиляции.
  • Тип поля с ? в схеме (name String?) будет string | null, а не string | undefined.
  • Enum в Prisma генерирует объект-константу и тип с одинаковым именем — не путайте импорт типа и значения.
  • Prisma не генерирует типы для сырых SQL-запросов ($queryRaw) — нужно приводить вручную через as.

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

  • Что такое транзакции в Prisma? Как использовать prisma.$transaction() для интерактивных и batch-транзакций?
  • Что такое Prisma Migrate? Чем отличаются prisma migrate dev и prisma migrate deploy?
  • Как определить связи один-к-одному, один-ко-многим и многие-ко-многим в Prisma?
  • Как структурирована схема Prisma (schema.prisma)? Что такое модели, поля и связи (relations)?

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

  • Путает Prisma Client API с гарантиями базы данных: индексы, блокировки и isolation level не создаются магически.
  • Не объясняет, где в lifecycle находится типобезопасность Prisma Client.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

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

  • Может объяснить типобезопасность Prisma Client на примере кода.
  • Называет ключевые API: generated types, PrismaClient.
  • Отделяет ORM/query builder поведение от реального поведения СУБД.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

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

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

Источники

  • https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client
  • https://www.prisma.io/docs/orm/prisma-client/queries/crud
Следующий вопрос→Что такое транзакции в Prisma? Как использовать `prisma.$transaction()` для интерактивных и batch-транзакций?

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

Prismaapi-designtyping