planning-with-files
Optional persistent file-based planning for multi-phase or long-running work that benefits from recovery across sessions or…
TypeScript best practices. Use when reading or editing any .ts or .tsx file.
$ npx -y skills add khaneliman/khanelinix --skill typescript-best-practices --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/typescript-best-practicesContext preview
The summary Claude sees to decide when to auto-load this skill.
TypeScript best practices. Use when reading or editing any .ts or .tsx file.
name: typescript-best-practices description: TypeScript best practices. Use when reading or editing any .ts or .tsx file.
Apply `type-system-discipline` from `engineering-principles` first. This skill grounds that principle 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. | | Constructive modeling | Build the shape so the illegal value can't be constructed. `[T, ...T[]]` for non-empty, `[T, T][]` for even length, `start` plus `duration` for a range. Not a runtime guard, not a wish for refinement types. | | Simplest total type | Keep `T[]` while every operation on it stays total. Strengthen to `NonEmpty<T>` only where the loose type forces `!`, a cast, or a "should never happen" throw. | | `unknown` over `any` | External data is `unknown`. `any` disables type checking everywhere it touches. | | Avoid unchecked assertions | Type assertions add no runtime validation. Prefer narrowing; assert only when evidence establishes the claimed type. | | 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. Apply `boundary-discipline` from `engineering-principles`. | | 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`.
Run packages directly with: Or install from the packages output. For example:
Optional persistent file-based planning for multi-phase or long-running work that benefits from recovery across sessions or…
Audit coding-agent sessions and mine cross-harness history for recurring corrections, skill-routing gaps, and harness faults. Use…
Design and audit agent instructions, skills, plugins, subagents, prompts, hooks, and provider configuration. Use for AI-tool…
Sketch interfaces, state, and module structure before code. Use for explicit design-led implementation or as a caller-owned…
Spawn N parallel candidates at the same task, pick a base, graft the strongest parts of the losers into it. Use for /arena,…
Bevy workflows for ECS, migrations, first-party UI/input/rendering/assets/shaders, plugin selection, scenes, scheduling, hot…