Skip to content
Back to skills

Typescript Best Practices

ASecurity

Review or edit TypeScript types and boundaries when TS or TSX code is in scope.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 1, 2026
ai-agentstypescriptrustexpressdebugging

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add williamwue/oh-my-stack --skill typescript-best-practices --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Typescript Best Practices?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Typescript Best Practices
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/williamwue-typescript-best-practices-39913a94/badge)](https://www.skillsdirectory.com/skills/williamwue-typescript-best-practices-39913a94)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: typescript-best-practices
description: Review or edit TypeScript types and boundaries when TS or TSX code is in scope.
---

# TypeScript best practices

Apply [type-system-discipline](../principle-type-system-discipline/SKILL.md)
when reading or changing `.ts` or `.tsx` files. Keep this Skill directly
invocable; the runtime adapter may offer path-scoped discovery only where its
native Skill format supports it. Do not broaden it to unrelated languages.

- Model variants with discriminated unions; use branded primitives only where
  mixing identifiers would be a real bug. Construct shapes that exclude invalid
  states, but keep simple total types such as `T[]` until a stronger type removes
  casts, non-null assertions, or impossible branches.
- Treat external values as `unknown` and parse once at boundaries. Prefer the
  repository's existing schema library to a handwritten guard. A type guard
  must actually check the shape it claims. Inside validated code, trust the
  domain type. Derive the domain type from its schema where possible. If the
  type comes first, type the validator against that complete type so removing
  a required field fails compilation. Parse with the schema that already owns
  the shape; add a new schema only where none exists. A partial field check
  cannot justify a claim that the whole object matches the domain type.
- Prefer discriminant switches, then property or primitive checks. Use casts
  only when evidence or validation justifies them. Use `satisfies` when checking
  an object without widening its literals. Check union exhaustiveness with
  `never` where a missing case would be harmful.
- Reuse `Pick`, `Omit`, `Parameters`, `ReturnType`, `Awaited`, and `typeof` when
  they express the same source of truth. Prefer named object arguments where
  positional order is error-prone; measure before changing hot paths.
- Test observable behavior with real local primitives when practical. Log
  useful structured identifiers rather than stray debugging output. Follow
  project style and actual library versions over generic examples.

Report specific changed or risky types, the boundary that validates them, and
checks run. Avoid a checklist recital for code that needs no change.

Files in this skill

  • SKILL.md1.8 KB
  • skill.json259 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…