skills/skillcreatorai/ai-agent-skills/javascript-typescript

# javascript-typescript

SKILL.md

# JavaScript/TypeScript Development

## TypeScript Configuration

    {
      "compilerOptions": {
        "target": "ES2022",
        "module": "ESNext",
        "moduleResolution": "bundler",
        "strict": true,
        "noUncheckedIndexedAccess": true,
        "noImplicitOverride": true,
        "skipLibCheck": true,
        "declaration": true,
        "outDir": "./dist"
      },
      "include": ["src/**/*"],
      "exclude": ["node_modules", "dist"]
    }

## Type Patterns

### Utility Types

    // Pick specific properties
    type UserPreview = Pick<User, 'id' | 'name'>;

    // Omit properties
    type CreateUser = Omit<User, 'id' | 'createdAt'>;

    // Make all properties optional
    type PartialUser = Partial<User>;

    // Make all properties required
    type RequiredUser = Required<User>;

    // Extract union types
    type Status = 'pending' | 'active' | 'inactive';
    type ActiveStatus = Extract<Status, 'active' | 'pending'>;

### Discriminated Unions

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

    function handleResult<T>(result: Result<T>) {
      if (result.success) {
        console.log(result.data); // T
      } else {
        console.error(result.error); // Error
      }
    }

### Generic Constraints

    interface HasId {
      id: string | number;
    }

    function findById<T extends HasId>(items: T[], id: T['id']): T | undefined {
      return items.find(item => item.id === id);
    }

## Modern JavaScript

### Destructuring & Spread

    const { name, ...rest } = user;
    const merged = { ...defaults, ...options };
    const [first, ...others] = items;

### Optional Chaining & Nullish Coalescing

    const city = user?.address?.city ?? 'Unknown';
    const count = data?.items?.length ?? 0;

### Array Methods

    const adults = users.filter(u => u.age >= 18);
    const names = users.map(u => u.name);
    const total = items.reduce((sum, item) => sum + item.price, 0);
    const hasAdmin = users.some(u => u.role === 'admin');
    const allActive = users.every(u => u.active);

## React Patterns

    // Props with children
    interface CardProps {
      title: string;
      children: React.ReactNode;
    }

    // Event handlers
    interface ButtonProps {
      onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
    }

    // Custom hooks
    function useLocalStorage<T>(key: string, initial: T) {
      const [value, setValue] = useState<T>(() => {
        const stored = localStorage.getItem(key);
        return stored ? JSON.parse(stored) : initial;
      });

      useEffect(() => {
        localStorage.setItem(key, JSON.stringify(value));
      }, [key, value]);

      return [value, setValue] as const;
    }

## Node.js Patterns

    // ES Modules
    import { readFile } from 'node:fs/promises';
    import { join } from 'node:path';

    // Error handling
    process.on('unhandledRejection', (reason) => {
      console.error('Unhandled Rejection:', reason);
      process.exit(1);
    });

Weekly Installs
106
Repository
skillcreatorai/ai-agent-skills
First Seen
Jan 18, 2026
Security Audits
Gen Agent Trust Hub Pass
Socket Pass
Snyk Pass
Installed on
opencode 78
claude-code 75
gemini-cli 72
codex 69
github-copilot 59
antigravity 58