<< All versions
Skill v1.0.1
Automated scan100/100cursor/plugins/typescript-best-practices
+2 new
──Details
PublishedJuly 21, 2026 at 06:26 AM
Content Hashsha256:43b06e6ece407189...
Git SHA3fe2823ce17c
Bump Typepatch
──Files
Files (1 file, 2.0 KB)
SKILL.md2.0 KBactive
SKILL.md · 28 lines · 2.0 KB
version: "1.0.1" name: typescript-best-practices description: TypeScript best practices. Use when reading or editing any .ts or .tsx file.
TypeScript best practices
Apply the type-system-discipline principle skill first; this skill grounds it in TypeScript syntax.
| Rule | Summary | |
|---|---|---|
| Discriminated unions | Model variants with a kind literal discriminant so impossible states can't be represented. No optional-field bags. | |
| Branded types | Brand primitives with & { readonly __brand: "X" } so they can't be mixed up. Validate once at creation. | |
unknown over any | External data is unknown. any disables type checking everywhere it touches. | |
No as casts | Every as is a runtime crash waiting. Cast only after validation. | |
| Narrowing hierarchy | Discriminant switch > in operator > typeof/instanceof > user-defined type guard > as. | |
| Type guards | Must verify the claim. A lying guard is worse than as because the bug hides behind a name that says it's safe. Name them isX or hasX. | |
| Exhaustiveness | Inline const _exhaustive: never = x; in default arms so the compiler errors when a new variant is added. | |
satisfies over as | Validates the value without widening literal types. | |
| Boundary validation | Validate where data crosses in; trust types inside. See the boundary-discipline principle skill. | |
| Schema-derived types | Reach for Pick/Omit/Parameters/ReturnType/Awaited/typeof before declaring a new interface. | |
| Object args | Pass objects, not positional, so argument order is self-documenting. Skip on hot paths (per-frame render, tokenizers, parsers). | |
| Real tests | Don't mock what you can run. Prefer the framework's real test primitives with leak/disposable checks, and verify UI in a running build. Mock only what you can't run locally. | |
| Structured telemetry | Prefer structured logger diagnostics with enough context to debug from an id. No console.log in shipped code. |
Examples: references/patterns.md.