From vosslab-skills
Resolve TypeScript errors, eliminate `any`, and design modular, strict TypeScript types including generics, conditional types, mapped types, template literal types, branded or opaque types, and deep inference. Use for type-inference problems, `infer` or `extends` questions, utility types such as `Partial`, `Record`, `ReturnType`, `Awaited`, `NoInfer`, `satisfies`, module-boundary type design, function overloads, declaration merging, strict-mode refactors, and production-grade type-safety reviews.
How this skill is triggered — by the user, by Claude, or both
Slash command
/vosslab-skills:typescript-engineerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill for type-level design, module-boundary type ownership, compiler-error diagnosis, and
agents/openai.yamlreferences/array-index-access.mdreferences/as-const-typeof.mdreferences/assertion-functions.mdreferences/builder-pattern.mdreferences/checklist.mdreferences/conditional-types.mdreferences/deep-inference.mdreferences/error-diagnosis.mdreferences/function-overloads.mdreferences/game-type-patterns.mdreferences/generics-basics.mdreferences/infer-keyword.mdreferences/mapped-types.mdreferences/modular-type-design.mdreferences/opaque-types.mdreferences/smell-test-examples.mdreferences/strict-mode-flags.mdreferences/template-literal-types.mdreferences/type-narrowing.mdUse this skill for type-level design, module-boundary type ownership, compiler-error diagnosis, and
strict-safety refactoring in TypeScript. Route non-trivial work to the focused rule files in
references/; do not answer from SKILL.md alone when the request involves advanced type behavior
or shared type design.
as is permitted only inside a brand constructor, a type-guard return, or
a documented boundary adapter. Never as a fix for a compiler error.any, unsafe unknown handling, or unchecked casts.tsc --noEmit and type-level tests.html-game-parallel-builder for the wrapper that triggers this case.tsc, bad tsconfig paths, or package resolution issues.tsc --noEmit, before proposing a fix when
the code is available.ts(...) code.references/modular-type-design.md when a type is
exported, shared, schema-derived, DTO-like, domain-level, owned by a game feature area
(player, simulation, render, save, config), or moved between files. For game-shape
patterns specifically, also read
references/game-type-patterns.md.docs/TYPESCRIPT_STYLE.md when present.Before exporting a type from one module to another, confirm:
export type re-export, not a deep barrel chain.as cast leaks across the boundary; brand constructors are the only exception.When the request is a review or audit, organize findings under these fixed headings only. Do not introduce Perf, Security, or Runtime headings; those are out of scope.
The four headings are fixed. Game-flavored vocabulary (Entity IDs, Coordinates and units, Save-file boundary, Simulation vs render, Config ownership, Event ownership) may appear as subheadings inside them, never as new top-level headings.
Expect<Equal<A, B>> when the repo has a pattern.// @ts-expect-error only when they prove an intentional rejection.tsc --noEmit or the repo's type-check command after changes.references/checklist.md, then drill into the specific
rule files it links.0a. The project is a single-bundle browser game, simulation, or interactive
client (keywords: game, simulation, save file, entity id, coordinate,
GameEvent, ECS, replay, seed, migration):
references/game-type-patterns.md, then
drill into other rule files (generics, conditional, mapped, opaque) as the
task requires.tsc is red:references/error-diagnosis.md.references/modular-type-design.md when the type
crosses a module, package, API, schema, storage, or domain boundary.references/generics-basics.md.references/conditional-types.md,
references/mapped-types.md, or
references/template-literal-types.md as needed.any or tighten types:references/type-narrowing.md.references/utility-types.md.references/generics-basics.md when a function or class
needs to become generic.| Keyword or topic | Rule file |
|---|---|
| Audit, sweep, pre-PR review, type-safety sweep | references/checklist.md |
| Game, browser game, simulation, save file, entity id, coordinate, unit, config table, GameEvent, ECS, replay, seed, migration | references/game-type-patterns.md |
| Shared contract, DTO, domain model, schema-derived type, public type API, boundary ownership | references/modular-type-design.md |
tsconfig strictness, noUncheckedIndexedAccess, exactOptionalPropertyTypes, verbatimModuleSyntax | references/strict-mode-flags.md |
as const, typeof, satisfies, enum alternative, derive types from values | references/as-const-typeof.md |
Array element type, [number] index | references/array-index-access.md |
Partial, Record, Omit, Pick, ReturnType, Parameters, Awaited, NoInfer | references/utility-types.md |
Generic, constraint, extends, type parameter | references/generics-basics.md |
| Builder pattern, chainable, fluent API | references/builder-pattern.md |
| Deep inference, const type parameter, preserve literal types | references/deep-inference.md |
Conditional type, extends ? :, distribute | references/conditional-types.md |
infer, extract inner type | references/infer-keyword.md |
| Template literal type, string manipulation at type level | references/template-literal-types.md |
Mapped type, in keyof, transform properties | references/mapped-types.md |
| Brand type, opaque type, nominal typing, validated ID | references/opaque-types.md |
Narrowing, typeof, instanceof, in, discriminated union, type guard, is | references/type-narrowing.md |
Assertion function, asserts value is, validate and throw | references/assertion-functions.md |
| Overload, multiple signatures | references/function-overloads.md |
Type error, diagnostic, ts(...), not assignable, circular reference | references/error-diagnosis.md |
For copy-pastable smell-test examples, see
references/smell-test-examples.md.
Under delegate-manager-to-subagents, this skill is assigned to a fresh
subagent with one bounded task, the relevant repo rules, and one
verification step. Do not continue the same subagent across unrelated
follow-up work; dispatch a new subagent for each atomic task. See
docs/REPO_STYLE.md.
Two invocation shapes exist; both apply the same return contract.
any in a file).html-game-parallel-builder): a coding subagent
pauses, invokes this skill with one narrow question (one shared
type, one brand, one boundary shape), and waits for a typed stub
before resuming its own work. Keep the question scoped; this is not
the full audit shape under "Review tasks".Every delegated invocation returns:
npx tsc --noEmit (or npx tsc --noEmit -p src/tsconfig.json in projects with a separate src/ config); the
success state is exit 0 with no diagnostic output. Quote the line
literally.Do not report DONE without the command line and its exact output.
"All green" without evidence is not a return; it is a false-green
claim and the manager will re-dispatch.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub vosslab/vosslab-skills --plugin vosslab-skills