Type Safety

SkillDev tools

TypeScript type safety guidelines for writing maximally type-safe code. Apply these patterns when writing or reviewing any TypeScript: discriminated unions, type narrowing, type guards, exhaustiveness checks, avoiding `as` casts, preferring `unknown` over `any`, and making impossible states unrepresentable. Use this skill whenever writing TypeScript code, reviewing TypeScript for type safety issues, or when the user mentions type safety, type narrowing, discriminated unions, or asks to make types stricter/more explicit.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Type Safety skill

What this skill tells your AI

The instructions your AI receives, as published by poteto/noodle in .agents/skills/ts-best-practices/SKILL.md and read by ahel’s review.

This project's TypeScript policy. Apply when writing or reviewing TypeScript.

RuleSummary
No as castsEvery as is a potential runtime crash. Validate at boundaries, then cast only if earned. Prefer Zod/Valibot over manual validation.
unknown over anyany disables type checking for everything it touches. External data is always unknown.
Discriminated unionsModel variants with a shared literal discriminant. No optional-field bags.
Narrowing hierarchyPrefer: discriminated union switch > in operator > typeof/instanceof > type guard > as
Type guardsMust actually verify the claim. Name them isX or hasX. Prefer discriminant narrowing when possible.
Exhaustiveness checksAlways add default: never arm to switches over discriminated unions. Use an absurd() helper to reduce boilerplate.
satisfies over asWhen verifying a value matches a type without widening, use satisfies to preserve literal types.
Impossible statesIf a bug requires asking "can this combination happen?" the type is too loose. Tighten it.

Read references/patterns.md for code examples of each rule.

Signals

GitHub stars
270
Forks
15
Last commit
Mar 2026
Advanced
Catalog kind
skill
Gateway key
ts-best-practices
Source
github.com/poteto/noodle