mcpField
T
typescript-best-practices

typescript-best-practices

github.com/potetoDevelopment161113 installsUpdated 22w ago
Repository

About typescript-best-practices

A TypeScript type-system discipline skill for coding agents. It emphasizes validated boundaries, precise modeling, and exhaustiveness checks to reduce unsafe type operations.

Key features

  1. 01Model variants with discriminated unions
  2. 02Separate primitives with branded types
  3. 03Prefer unknown over any
  4. 04Validate data before assertions
  5. 05Check exhaustiveness in branches
  6. 06Derive types from schemas

Use cases

  1. 01Design validation for external inputs
  2. 02Model variants without invalid states
  3. 03Review type guards and assertions
  4. 04Choose object-shaped function arguments

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/poteto/plugins --skill typescript-best-practices

After installing, type/typescript-best-practicesin Claude Code to confirm it loaded.

Bundled filesreferences/patterns.md

Details

From the project README

TypeScript best practices

Apply the type-system-discipline principle skill first; this skill grounds it in TypeScript syntax.

RuleSummary
Discriminated unionsModel variants with a kind literal discriminant so impossible states can't be represented. No optional-field bags.
Branded typesBrand primitives with & { readonly __brand: "X" } so they can't be mixed up. Validate once at creation.
unknown over anyExternal data is unknown. any disables type checking everywhere it touches.
No as castsEvery as is a runtime crash waiting. Cast only after validation.
Narrowing hierarchyDiscriminant switch > in operator > typeof/instanceof > user-defined type guard > as.
Type guardsMust 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.
ExhaustivenessInline const _exhaustive: never = x; in default arms so the compiler errors when a new variant is added.
satisfies over asValidates the value without widening literal types.
Boundary validationValidate where data crosses in; trust types inside. See the boundary-discipline principle skill.
Schema-derived typesReach for Pick/Omit/Parameters/ReturnType/Awaited/typeof before declaring a new interface.
Object argsPass objects, not positional, so argument order is self-documenting. Skip on hot paths (per-frame render, tokenizers, parsers).

Examples: references/patterns.md.

Comments

Markdown supported