Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Accelerating the Agent Economy

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    kurojs

    typescript

    kurojs/typescript
    Coding
    1
    1 installs

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    TypeScript strict patterns and best practices. Trigger: When writing TypeScript code - types, interfaces, generics.

    SKILL.md

    Const Types Pattern (REQUIRED)

    // ✅ ALWAYS: Create const object first, then extract type
    const STATUS = {
      ACTIVE: "active",
      INACTIVE: "inactive",
      PENDING: "pending",
    } as const;
    
    type Status = (typeof STATUS)[keyof typeof STATUS];
    
    // ❌ NEVER: Direct union types
    type Status = "active" | "inactive" | "pending";
    

    Why? Single source of truth, runtime values, autocomplete, easier refactoring.

    Flat Interfaces (REQUIRED)

    // ✅ ALWAYS: One level depth, nested objects → dedicated interface
    interface UserAddress {
      street: string;
      city: string;
    }
    
    interface User {
      id: string;
      name: string;
      address: UserAddress;  // Reference, not inline
    }
    
    interface Admin extends User {
      permissions: string[];
    }
    
    // ❌ NEVER: Inline nested objects
    interface User {
      address: { street: string; city: string };  // NO!
    }
    

    Never Use any

    // ✅ Use unknown for truly unknown types
    function parse(input: unknown): User {
      if (isUser(input)) return input;
      throw new Error("Invalid input");
    }
    
    // ✅ Use generics for flexible types
    function first<T>(arr: T[]): T | undefined {
      return arr[0];
    }
    
    // ❌ NEVER
    function parse(input: any): any { }
    

    Utility Types

    Pick<User, "id" | "name">     // Select fields
    Omit<User, "id">              // Exclude fields
    Partial<User>                 // All optional
    Required<User>                // All required
    Readonly<User>                // All readonly
    Record<string, User>          // Object type
    Extract<Union, "a" | "b">     // Extract from union
    Exclude<Union, "a">           // Exclude from union
    NonNullable<T | null>         // Remove null/undefined
    ReturnType<typeof fn>         // Function return type
    Parameters<typeof fn>         // Function params tuple
    

    Type Guards

    function isUser(value: unknown): value is User {
      return (
        typeof value === "object" &&
        value !== null &&
        "id" in value &&
        "name" in value
      );
    }
    

    Import Types

    import type { User } from "./types";
    import { createUser, type Config } from "./utils";
    

    Keywords

    typescript, ts, types, interfaces, generics, strict mode, utility types

    Recommended Servers
    Vercel Grep
    Vercel Grep
    Prisma
    Prisma
    Microsoft Learn MCP
    Microsoft Learn MCP
    Repository
    kurojs/ender4-dots
    Files