Typescript Magician

by mcollina72b727514771No licenseListed Oct 8, 2026Updated Oct 8, 2026

Designs complex generic types, refactors `any` types to strict alternatives, creates type guards and utility types, and resolves TypeScript compiler errors. Use when the user asks about TypeScript (TS) types, generics, type inference, type guards, removing `any` types, strict typing, type errors, `infer`, `extends`, conditional types, mapped types, template literal types, branded/opaque types, or utility types like `Partial`, `Record`, `ReturnType`, and `Awaited`.

Instructions onlySoftware Development
AI-generated overview

Guides TypeScript type work: generics, conditional and mapped types, type guards, and removing any types.

What it does
This skill provides instructions and reference rules for solving TypeScript type problems. It covers advanced generics, conditional, mapped and template literal types, utility types, branded or opaque types, type narrowing, function overloads, and error diagnosis. It produces type-safe code solutions with before/after examples, explanations of the type theory, and type tests, and it directs the agent to run tsc --noEmit before and after changes.
When to use it
Use it when a user asks about TypeScript types, generics, inference, type guards, strict typing, or specific features such as infer, extends, conditional types, mapped types, or utility types. It also fits eliminating any types and resolving TypeScript compiler errors.
Requirements
Requires a TypeScript project and the tsc compiler available to run tsc --noEmit. Ships no scripts; it is instructions plus markdown rule files.

When to use

Use this skill for:

  • TypeScript errors and type challenges
  • Eliminating any types from codebases
  • Complex generics and type inference issues
  • When strict typing is needed

Instructions

When invoked:

  1. Run tsc --noEmit to capture the full error output before making changes
  2. Identify the root cause of type issues (unsound inference, missing constraints, implicit any, etc.)
  3. Craft precise, type-safe solutions using advanced TypeScript features
  4. Eliminate all any types with proper typing — validate each replacement still satisfies call sites
  5. Confirm the fix compiles cleanly with a second tsc --noEmit pass

Capabilities include:

  • Advanced generics and conditional types
  • Template literal types and mapped types
  • Utility types and type manipulation
  • Brand types and nominal typing
  • Complex inference patterns
  • Variance and distribution rules
  • Module augmentation and declaration merging

For every TypeScript challenge:

  • Explain the type theory behind the problem
  • Provide multiple solution approaches when applicable
  • Show before/after type representations
  • Include comprehensive type tests
  • Ensure full IntelliSense support

Quick Examples

Eliminating any with generics

Before

ts
function getProperty(obj: any, key: string): any {  return obj[key];}

After

ts
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {  return obj[key];}// getProperty({ name: "Alice" }, "name") → inferred as string ✓

Narrowing an unknown API response

Before

ts
async function fetchUser(): Promise<any> {  const res = await fetch("/api/user");  return res.json();}

After

ts
interface User { id: number; name: string }
function isUser(value: unknown): value is User {  return (    typeof value === "object" &&    value !== null &&    "id" in value &&    "name" in value  );}
async function fetchUser(): Promise<User> {  const res = await fetch("/api/user");  const data: unknown = await res.json();  if (!isUser(data)) throw new Error("Invalid user shape");  return data;}

Reference

Read individual rule files for detailed explanations and code examples:

Core Patterns

  • rules/as-const-typeof.md [blocked] - Deriving types from runtime values using as const and typeof
  • rules/array-index-access.md [blocked] - Accessing array element types using [number] indexing
  • rules/utility-types.md [blocked] - Built-in utility types: Parameters, ReturnType, Awaited, Omit, Partial, Record

Advanced Generics

  • rules/generics-basics.md [blocked] - Fundamentals of generic types, constraints, and inference
  • rules/builder-pattern.md [blocked] - Type-safe builder pattern with chainable methods
  • rules/deep-inference.md [blocked] - Achieving deep type inference with F.Narrow and const type parameters

Type-Level Programming

  • rules/conditional-types.md [blocked] - Conditional types for type-level if/else logic
  • rules/infer-keyword.md [blocked] - Using infer to extract types within conditional types
  • rules/template-literal-types.md [blocked] - String manipulation at the type level
  • rules/mapped-types.md [blocked] - Creating new types by transforming existing type properties

Type Safety Patterns

  • rules/opaque-types.md [blocked] - Brand types and opaque types for type-safe identifiers
  • rules/type-narrowing.md [blocked] - Narrowing types through control flow analysis
  • rules/function-overloads.md [blocked] - Using function overloads for complex function signatures

Debugging

  • rules/error-diagnosis.md [blocked] - Strategies for diagnosing and understanding TypeScript type errors

Source and attribution

Source:mcollina/skillsinskills/typescript-magicianat commit72b7275

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal