Added AI skills

This commit is contained in:
Jose Selesan
2026-09-04 16:49:24 -03:00
parent 778f3fdcad
commit dfa7f73ebb
368 changed files with 51560 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
---
title: Use Primitive Schemas Correctly
impact: CRITICAL
impactDescription: Incorrect primitive selection causes validation to pass on wrong types; using z.any() or z.unknown() loses all type safety
tags: schema, primitives, types, basics
---
## Use Primitive Schemas Correctly
Zod provides specific schemas for each primitive type. Using the wrong schema (e.g., `z.string()` when you need `z.number()`) or falling back to `z.any()` defeats the purpose of validation entirely, allowing corrupt data through.
**Incorrect (wrong primitive or any):**
```typescript
import { z } from 'zod'
// Using any loses all type safety
const userSchema = z.object({
id: z.any(), // Accepts anything - no validation
age: z.string(), // Wrong type - age should be number
active: z.any(), // Should be boolean
})
// This passes validation but data is wrong
userSchema.parse({ id: null, age: "twenty", active: "yes" })
// Result: { id: null, age: "twenty", active: "yes" }
```
**Correct (specific primitives):**
```typescript
import { z } from 'zod'
const userSchema = z.object({
id: z.string().uuid(), // Specific format validation
age: z.number().int().positive(), // Correct type with constraints
active: z.boolean(), // Exact boolean type
})
// Now invalid data is rejected
userSchema.parse({ id: null, age: "twenty", active: "yes" })
// Throws ZodError with specific field errors
```
**Available primitive schemas:**
- `z.string()` - strings with optional regex, min, max, email, url, uuid
- `z.number()` - numbers with optional int, positive, negative, min, max
- `z.bigint()` - BigInt values
- `z.boolean()` - true/false only
- `z.date()` - Date objects
- `z.symbol()` - Symbol type
- `z.undefined()` - undefined only
- `z.null()` - null only
- `z.void()` - undefined (for function returns)
- `z.never()` - no valid value
**When NOT to use this pattern:**
- When you genuinely need to accept any value (rare - consider `z.unknown()` instead)
- When migrating legacy code incrementally (use `z.any()` temporarily, then fix)
Reference: [Zod Primitives](https://zod.dev/api#primitives)