Skip to main content

typescript-style

TypeScript coding style enforcement (ESLint, type safety, React patterns). Auto-loads when writing or reviewing TypeScript/JavaScript code.

Stars
13
Source
jpoutrin/product-forge
Updated
2026-03-01
Slug
jpoutrin--product-forge--typescript-style
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/jpoutrin/product-forge/HEAD/plugins/frontend-experts/skills/typescript-style/SKILL.md -o .claude/skills/typescript-style.md

Drops the SKILL.md into .claude/skills/typescript-style.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

TypeScript/JavaScript Style Best Practices Skill

This skill enforces TypeScript strict mode, ESLint standards, and modern patterns for frontend development.

Core Standards

  • Strict TypeScript: All strict flags enabled
  • ESLint: Type-checked rules enabled
  • No any: Use unknown or proper types
  • Explicit returns: All functions typed

Naming Conventions

// Types/Interfaces: PascalCase
interface UserProfile { }

// Functions/variables: camelCase
function calculateTotal() { }
const userName = "john";

// Booleans: is/has/can/should prefix
const isLoading = true;
const hasPermission = false;

Type Definitions

// Prefer union types over enums
type Status = "pending" | "active" | "completed";

// Use as const for constant objects
const HttpStatus = {
  Ok: 200,
  NotFound: 404,
} as const;

// Discriminated unions
type Result<T> =
  | { success: true; data: T }
  | { success: false; error: Error };

React Patterns

// Typed props
interface ButtonProps {
  label: string;
  onClick: () => void;
  disabled?: boolean;
}

// Typed hooks
const [isOpen, setIsOpen] = useState(false);

// Typed event handlers
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {};

Function Length Guidelines

  • < 30 lines: Ideal
  • 30-50 lines: Review for refactoring
  • > 50 lines: Must be broken down

Anti-Patterns to Avoid

  • Using any type
  • Missing return types
  • Using == instead of ===
  • Unhandled promises
  • Magic numbers/strings
  • Vague variable/function names