Bird
Raised Fist0
NextJSframework~20 mins

Schema definition in NextJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Next.js Schema Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this Next.js schema validation?
Given this Next.js schema using Zod, what will be the result of validating { age: 20 }?
NextJS
import { z } from 'zod';

const userSchema = z.object({
  name: z.string().min(1),
  age: z.number().int().min(18),
});

const result = userSchema.safeParse({ age: 20 });
console.log(result.success);
AThrows a runtime error
Btrue
Cfalse
Dundefined
Attempts:
2 left
💡 Hint
Check if all required fields are present in the object.
📝 Syntax
intermediate
2:00remaining
Which option correctly defines a Next.js schema for a user with optional email?
Choose the correct Zod schema that defines a user object with a required username string and an optional email string.
Az.object({ username: z.string().optional(), email: z.string() })
Bz.object({ username: z.string().required(), email: z.string() })
Cz.object({ username: z.string(), email: z.string().nullable() })
Dz.object({ username: z.string(), email: z.string().optional() })
Attempts:
2 left
💡 Hint
Optional fields use the .optional() method in Zod.
🔧 Debug
advanced
2:00remaining
Why does this Next.js schema validation throw an error?
Examine the code and identify why validation throws an error instead of returning a result.
NextJS
import { z } from 'zod';

const productSchema = z.object({
  id: z.number(),
  price: z.number().positive(),
});

const data = { id: 1, price: -5 };

const result = productSchema.parse(data);
console.log(result);
ABecause price is negative and parse throws on invalid data
BBecause id is not a string
CBecause parse returns undefined on failure
DBecause the schema is missing a required field
Attempts:
2 left
💡 Hint
Check the value constraints on the price field.
state_output
advanced
2:00remaining
What is the value of isValid after this Next.js schema check?
Given this code, what is the value of isValid after validation?
NextJS
import { z } from 'zod';

const loginSchema = z.object({
  email: z.string().email(),
  password: z.string().min(8),
});

const input = { email: 'user@example.com', password: '1234567' };

const isValid = loginSchema.safeParse(input).success;
Atrue
Bfalse
CThrows a TypeError
Dundefined
Attempts:
2 left
💡 Hint
Check the minimum length required for password.
🧠 Conceptual
expert
2:00remaining
Which statement about Next.js schema definitions with Zod is correct?
Select the only true statement about using Zod schemas in Next.js for data validation.
AZod schemas can be used both server-side and client-side for consistent validation.
BZod schemas can only validate client-side data, not server-side.
CZod automatically converts all input data types to strings during validation.
DZod schemas require manual error handling for every validation failure.
Attempts:
2 left
💡 Hint
Think about where Next.js code runs and how Zod works.

Practice

(1/5)
1. What is the main purpose of schema definition in a Next.js project?
easy
A. To manage server-side rendering
B. To describe the shape and rules of your data
C. To style the user interface components
D. To handle routing between pages

Solution

  1. Step 1: Understand schema definition role

    Schema definition is about specifying how data should look and behave.
  2. Step 2: Identify its main use in Next.js

    It helps validate data to catch errors early before using it in the app.
  3. Final Answer:

    To describe the shape and rules of your data -> Option B
  4. Quick Check:

    Schema = Data shape and rules [OK]
Hint: Schema defines data shape and validation rules [OK]
Common Mistakes:
  • Confusing schema with UI styling
  • Thinking schema manages routing
  • Assuming schema handles rendering
2. Which of the following is the correct way to define a simple string schema using the zod library in Next.js?
easy
A. const schema = z.string();
B. const schema = z.string;
C. const schema = z.String();
D. const schema = new z.string();

Solution

  1. Step 1: Recall zod syntax for string schema

    In zod, string schema is created by calling z.string() as a function.
  2. Step 2: Check each option's syntax

    const schema = z.string(); uses z.string() correctly. Others miss parentheses or use wrong casing or new keyword.
  3. Final Answer:

    const schema = z.string(); -> Option A
  4. Quick Check:

    z.string() is correct syntax [OK]
Hint: Use parentheses to call z.string() function [OK]
Common Mistakes:
  • Omitting parentheses after z.string
  • Using uppercase 'String' instead of 'string'
  • Using 'new' keyword incorrectly
3. Given this schema definition using zod:
const userSchema = z.object({
name: z.string(),
age: z.number().min(18)
});
const result = userSchema.safeParse({ name: "Alice", age: 16 });
console.log(result.success);

What will be logged to the console?
medium
A. true
B. Throws an error
C. false
D. undefined

Solution

  1. Step 1: Understand schema rules

    The schema requires 'name' as string and 'age' as number at least 18.
  2. Step 2: Check input data against schema

    Input has age 16, which is less than minimum 18, so validation fails.
  3. Final Answer:

    false -> Option C
  4. Quick Check:

    Validation fails because age < 18 [OK]
Hint: Check min() constraints carefully in validation [OK]
Common Mistakes:
  • Assuming validation passes despite age < 18
  • Confusing safeParse result with direct parse
  • Expecting an error instead of false success
4. Identify the error in this Next.js schema definition using zod:
const productSchema = z.object({
id: z.number,
title: z.string(),
price: z.number()
});
medium
A. Missing comma after 'title' property
B. Schema object should be an array
C. Using z.string() incorrectly
D. Missing parentheses after z.number for 'id'

Solution

  1. Step 1: Check each property schema syntax

    'id' uses z.number without parentheses, which is incorrect syntax.
  2. Step 2: Verify other properties and object structure

    Other properties are correct; object schema is correctly defined as an object, not array.
  3. Final Answer:

    Missing parentheses after z.number for 'id' -> Option D
  4. Quick Check:

    z.number() needs parentheses [OK]
Hint: Always call zod types as functions with () [OK]
Common Mistakes:
  • Forgetting parentheses after z.number or z.string
  • Thinking schema must be an array
  • Missing commas between properties
5. You want to define a schema for a user profile in Next.js using zod where the 'email' field is optional but if present must be a valid email string. Which schema definition is correct?
hard
A. const userProfileSchema = z.object({ email: z.string().email().optional() });
B. const userProfileSchema = z.object({ email: z.optional(z.string().email) });
C. const userProfileSchema = z.object({ email: z.string().optional().email() });
D. const userProfileSchema = z.object({ email: z.string().email() || undefined });

Solution

  1. Step 1: Understand optional email schema in zod

    To make a field optional but validate if present, use .optional() after .email().
  2. Step 2: Check each option's method chaining

    const userProfileSchema = z.object({ email: z.string().email().optional() }); correctly chains z.string().email().optional(). const userProfileSchema = z.object({ email: z.optional(z.string().email) }); uses z.optional incorrectly. const userProfileSchema = z.object({ email: z.string().optional().email() }); calls optional before email, which breaks validation. const userProfileSchema = z.object({ email: z.string().email() || undefined }); uses invalid syntax.
  3. Final Answer:

    const userProfileSchema = z.object({ email: z.string().email().optional() }); -> Option A
  4. Quick Check:

    Use .optional() after .email() for optional validated fields [OK]
Hint: Chain .optional() after .email() for optional email fields [OK]
Common Mistakes:
  • Placing .optional() before .email()
  • Using z.optional() wrapper incorrectly
  • Trying to use || undefined for optional