Agent Skills: TypeScript Advanced Types

Configures modern TypeScript (4.9+ through 5.x) for maximum type safety with sustainable compile times. Use when designing type-safe configs/maps/APIs, enforcing strictness flags, improving TS build performance (incremental, project references), or setting up separate TS/ESLint configs for tests.

UncategorizedID: Git-Fg/thecattoolkit/configuring-typescript

Install this agent skill to your local

pnpm dlx add-skill https://github.com/Git-Fg/thecattoolkit/tree/HEAD/plugins/sys-nodejs/skills/configuring-typescript

Skill Files

Browse the full folder contents for configuring-typescript.

Download Skill

Loading file tree…

plugins/sys-nodejs/skills/configuring-typescript/SKILL.md

Skill Metadata

Name
configuring-typescript
Description
"Configures modern TypeScript (4.9+ through 5.x) for maximum type safety with sustainable compile times. Use when designing type-safe configs/maps/APIs, enforcing strictness flags, improving TS build performance (incremental, project references), or setting up separate TS/ESLint configs for tests."

TypeScript Advanced Types

Modern TypeScript playbook for writing code that is correct, ergonomic, and fast enough.

Quick Reference

| Need | See | |:-----|-----| | Modern features (satisfies, const type params) | Modern Features | | Generics, conditional types, mapped types | Type-Level Toolbox | | Config objects, event emitters, API clients | Practical Patterns | | Test patterns, tsconfig templates | Tests & Configs | | Compile-time optimization | Performance Playbook | | Type testing, PR checklist | Type Testing |

When to Use

Use this skill when:

  • Building type-safe configs/maps/APIs (feature flags, route tables, event maps)
  • Designing type-safe APIs (HTTP clients, RPC layers, CLI command maps)
  • Enforcing strictness beyond "strict": true:
    • noUncheckedIndexedAccess
    • exactOptionalPropertyTypes
    • verbatimModuleSyntax
  • Improving compile times (incremental builds, project references)
  • Setting up separate TS/ESLint configs for tests

Default Workflow

  1. Start with data shape and ownership — Is value internally constructed (safe) or external input (unsafe)?
  2. Choose the lightest typing toolsatisfies for configs, mapped types for transformations, infer for function inference
  3. Lock strictness and hygiene — Enable noUncheckedIndexedAccess, exactOptionalPropertyTypes, consider verbatimModuleSyntax
  4. Keep builds fast — Enable incremental, use project references in monorepos, measure with --extendedDiagnostics
  5. Tests: strict where matters, pragmatic where not — Separate tsconfig.test.json, ESLint overrides for test files only

Key Highlights

satisfies — Use Aggressively

Validates object shape without losing literal inference or widening to string/number.

type AppConfig = {
  env: "dev" | "prod";
  apiBaseUrl: string;
  retries: number;
};

export const config = {
  env: "dev",
  apiBaseUrl: "https://api.example.com",
  retries: 3,
} satisfies AppConfig;
// config.env is "dev" (literal), not "dev" | "prod"

Strictness Beyond "strict": true

noUncheckedIndexedAccess — Adds undefined to indexed access:

const dict: Record<string, { id: string }> = {};
const x = dict["missing"]; // { id: string } | undefined

exactOptionalPropertyTypes — Optional ≠ undefined:

type UserPrefs = { theme?: "dark" | "light" };
const prefs: UserPrefs = {};
prefs.theme = "dark";     // ok
// prefs.theme = undefined; // error

verbatimModuleSyntax — Module hygiene:

import type { User } from "./types";     // type-only
import { createUser } from "./runtime"; // runtime (kept in output)

Resources

See references/ for detailed guides on each topic.