К основному содержанию
скилл CX Codex

typescript-best-practices · jwynia — скилл для Claude Code: как установить

Задаёт агенту правила надёжного написания TypeScript: запрещает any, требует readonly для структур данных и внедряет тип Result вместо выброса исключений.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add jwynia/agent-skills --skill typescript-best-practices -a claude-code
Открыть на GitHub

Что делает typescript-best-practices

Скилл передаёт агенту набор правил для генерации, рефакторинга и ревью кода. Он заставляет модель предпочитать unknown с проверкой типов вместо any, использовать объединения строковых литералов вместо числовых enum и явно указывать типы возвращаемых значений для экспортируемых функций.

В вопросах архитектуры скилл продвигает неизменяемость через модификатор readonly на свойствах интерфейсов и массивах. Для обработки ошибок внедряется паттерн Result<T, E>, чтобы контролировать предсказуемые сбои через систему типов и не разрывать поток выполнения оператором throw.

Для запуска скриптов анализа требуется установленный Deno. Скилл рассчитан строго на TypeScript и не подходит для проектов на чистом JavaScript или отладки ошибок времени выполнения.

Какие задачи решает

  • перевести проект с JavaScript на строгий TypeScript без потери типов
  • провести автоматический аудит типов и публичных интерфейсов перед коммитом
  • заменить небезопасные конструкции с any на сужение типов через unknown
  • переписать логику функций на возврат типизированного объекта Result вместо генерации исключений

Примеры запросов агенту

  • Проверь модуль auth.ts на соответствие стандартам TypeScript и избавься от any.
  • Перепиши функцию разбора конфигурации с использованием типа Result вместо throw.
  • Спроектируй типизированный интерфейс для клиента API с неизменяемыми свойствами.

Как установить typescript-best-practices

1Через Skills CLI (Vercel)

npx skills add jwynia/agent-skills --skill typescript-best-practices -a claude-code

2Вручную: положить файлы

~/.claude/skills/typescript-best-practices/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/typescript-best-practices/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о typescript-best-practices

Как установить typescript-best-practices в Claude Code?

Выполните в терминале команду npx skills add jwynia/agent-skills --skill typescript-best-practices -a claude-code. Файл навыка сохранится по пути ~/.claude/skills/typescript-best-practices/SKILL.md.

Что делает скилл typescript-best-practices?

Он задаёт ИИ-помощнику правила строгой типизации, архитектурные шаблоны и запрещает антипаттерны вроде неявных приведений типов или изменяемых входных параметров.

Какие системные требования нужны для работы скилла?

Для скриптов анализа требуется установленный Deno. Сами правила типизации применимы к любой кодовой базе на TypeScript.

Исходный текст

SKILL.md · MIT
---
name: typescript-best-practices
description: "Guide AI agents through TypeScript coding best practices including type safety, error handling, code organization, and architecture patterns. This skill should be used when generating TypeScript code, reviewing TypeScript files, creating new TypeScript modules, refactoring JavaScript to TypeScript, or when the user asks about TypeScript patterns, types, or coding standards. Keywords: typescript, types, coding standards, best practices, type safety, generics, architecture, refactoring."
license: MIT
compatibility: Requires Deno for analysis scripts. Applicable to any TypeScript codebase.
metadata:
  author: agent-skills
  version: "1.0"
  type: utility
  mode: assistive
  domain: development
---

# TypeScript Best Practices

Guide AI agents in writing high-quality TypeScript code. This skill provides coding standards, architecture patterns, and tools for analysis and scaffolding.

## When to Use This Skill

Use this skill when:
- Generating new TypeScript code
- Reviewing TypeScript files for quality issues
- Creating new modules, services, or components
- Refactoring JavaScript to TypeScript
- Answering questions about TypeScript patterns or types
- Designing APIs or interfaces

Do NOT use this skill when:
- Working with pure JavaScript (no TypeScript)
- Debugging runtime errors (use debugging tools)
- Framework-specific patterns (React, Vue, etc. - use framework skills)

## Core Principles

### 1. Type Safety First

Maximize compile-time error detection:

```typescript
// Prefer unknown over any for unknown types
function processInput(data: unknown): string {
  if (typeof data === "string") return data;
  if (typeof data === "number") return String(data);
  throw new Error("Unsupported type");
}

// Explicit return types for public APIs
export function calculateTotal(items: ReadonlyArray<Item>): number {
  return items.reduce((sum, item) => sum + item.price, 0);
}

// Use const assertions for literal types
const CONFIG = {
  mode: "production",
  version: 1,
} as const;
```

### 2. Immutability by Default

Prevent accidental mutations:

```typescript
// Use readonly for object properties
interface User {
  readonly id: string;
  readonly email: string;
  name: string; // Only mutable if intentional
}

// Use ReadonlyArray for collections
function processItems(items: ReadonlyArray<Item>): ReadonlyArray<Result> {
  return items.map(transform);
}

// Prefer spreading over mutation
function updateUser(user: User, name: string): User {
  return { ...user, name };
}
```

### 3. Error Handling with Types

Use the type system for error handling:

```typescript
// Result type for recoverable errors
type Result<T, E = Error> =
  | { success: true; value: T }
  | { success: false; error: E };

// Typed error classes
class ValidationError extends Error {
  constructor(
    message: string,
    readonly field: string,
    readonly code: string
  ) {
    super(message);
    this.name = "ValidationError";
  }
}

// Function with Result return type
function parseConfig(input: string): Result<Config, ValidationError> {
  try {
    const data = JSON.parse(input);
    if (!isValidConfig(data)) {
      return {
        success: false,
        error: new ValidationError("Invalid config", "root", "INVALID_FORMAT"),
      };
    }
    return { success: true, value: data };
  } catch {
    return {
      success: false,
      error: new ValidationError("Parse failed", "root", "PARSE_ERROR"),
    };
  }
}
```

### 4. Code Organization

Structure code for maintainability:

```typescript
// One concept per file
// user.ts - User type and related utilities
export interface User {
  readonly id: string;
  readonly email: string;
  readonly createdAt: Date;
}

export function createUser(email: string): User {
  return {
    id: crypto.randomUUID(),
    email,
    createdAt: new Date(),
  };
}

// Explicit exports (no barrel file wildcards)
// index.ts
export { User, createUser } from "./user.ts";
export { validateEmail } from "./validation.ts";
```

## Quick Reference

| Category | Prefer | Avoid |
|----------|--------|-------|
| Unknown types | `unknown` | `any` |
| Collections | `ReadonlyArray<T>` | `T[]` for inputs |
| Objects | `Readonly<T>` | Mutable by default |
| Null checks | Optional chaining `?.` | `!= null` |
| Type narrowing | Type guards | `as` assertions |
| Return types | Explicit on exports | Inferred on exports |
| Enums | String literal unions | Numeric enums |
| Imports | Named imports | Default imports |
| Errors | Result types | Throwing for flow control |
| Loops | `for...of`, `.map()` | `for...in` on arrays |

## Code Generation Guidelines

When generating TypeScript code, follow these patterns:

### Module Structure

```typescript
/**
 * Module description
 * @module module-name
 */

// === Types ===
export interface ModuleOptions {
  readonly setting: string;
}

export interface ModuleResult {
  readonly data: unknown;
}

// === Constants ===
const DEFAULT_OPTIONS: ModuleOptions = {
  setting: "default",
};

// === Implementation ===
export function processData(
  input: unknown,
  options: Partial<ModuleOptions> = {}
): ModuleResult {
  const opts = { ...DEFAULT_OPTIONS, ...options };
  // Implementation
  return { data: input };
}
```

### Function Design

```typescript
// Pure functions preferred
function transform(input: Input): Output {
  // No side effects, same input = same output
  return { ...input, processed: true };
}

// Explicit parameter types
function fetchUser(id: string, options?: FetchOptions): Promise<User> {
  // Implementation
}

// Use function overloads for complex signatures
function parse(input: string): ParsedData;
function parse(input: Buffer): ParsedData;
function parse(input: string | Buffer): ParsedData {
  // Implementation
}
```

### Interface Design

```typescript
// Prefer interfaces for object shapes
interface UserData {
  readonly id: string;
  readonly email: string;
}

// Use type for unions and intersections
type UserRole = "admin" | "user" | "guest";
type AdminUser = UserData & { readonly role: "admin" };

// Document with JSDoc
/**
 * Configuration for the API client
 * @property baseUrl - The base URL for API requests
 * @property timeout - Request timeout in milliseconds
 */
interface ApiConfig {
  readonly baseUrl: string;
  readonly timeout?: number;
}
```

## Common Anti-Patterns

Avoid these patterns when generating code:

| Anti-Pattern | Problem | Solution |
|--------------|---------|----------|
| `any` type | Disables type checking | Use `unknown` and narrow |
| `as` assertions | Runtime errors | Use type guards |
| Non-null `!` | Null pointer errors | Optional chaining `?.` |
| Mutable params | Unexpected mutations | `Readonly<T>` |
| Magic strings | Typos, no autocomplete | String literal types |
| God classes | Hard to test/maintain | Single responsibility |
| Circular deps | Build/runtime issues | Dependency inversion |
| Index signatures | Lose type info | Explicit properties |

See `references/anti-patterns/common-mistakes.md` for detailed examples.

## Scripts Reference

### analyze.ts

Analyze TypeScript code for quality issues:

```bash
deno run --allow-read scripts/analyze.ts <path> [options]

Options:
  --strict        Enable all checks
  --json          Output JSON for programmatic use
  --fix-hints     Show suggested fixes

Examples:
  # Analyze a file
  deno run --allow-read scripts/analyze.ts ./src/utils.ts

  # Analyze directory with strict mode
  deno run --allow-read scripts/analyze.ts ./src --strict

  # JSON output for CI
  deno run --allow-read scripts/analyze.ts ./src --json
```

### generate-types.ts

Generate TypeScript types from JSON data:

```bash
deno run --allow-read --allow-write scripts/generate-types.ts <input> [options]

Options:
  --name <name>   Root type name (default: inferred)
  --output <path> Output file path
  --readonly      Generate readonly types
  --interface     Use interface instead of type

Examples:
  # Generate from JSON file
  deno run --allow-read scripts/generate-types.ts ./data.json --name Config

  # Generate readonly interface
  deno run --allow-read --allow-write scripts/generate-types.ts ./api-response.json \
    --interface --readonly --output ./types/api.ts
```

### scaffold-module.ts

Create properly structured TypeScript modules:

```bash
deno run --allow-read --allow-write scripts/scaffold-module.ts [options]

Options:
  --name <name>   Module name (required)
  --path <path>   Target directory (default: ./src)
  --type <type>   Type: service, util, component
  --with-tests    Include test file

Examples:
  # Create a utility module
  deno run --allow-read --allow-write scripts/scaffold-module.ts \
    --name "string-utils" --type util

  # Create a service with tests
  deno run --allow-read --allow-write scripts/scaffold-module.ts \
    --name "user-service" --type service --with-tests
```

## Additional Resources

### Type System Deep Dives
- `references/type-system/advanced-types.md` - Generics, conditional types, mapped types
- `references/type-system/type-guards.md` - Type narrowing techniques
- `references/type-system/utility-types.md` - Built-in utility types

### Pattern Guides
- `references/patterns/error-handling.md` - Result types, typed errors
- `references/patterns/async-patterns.md` - Async/await best practices
- `references/patterns/functional-patterns.md` - Immutability, composition
- `references/patterns/module-patterns.md` - Exports, dependency injection

### Architecture
- `references/architecture/project-structure.md` - Directory organization
- `references/architecture/api-design.md` - Interface design, versioning

### Templates
- `assets/templates/module-template.ts.md` - Module starter template
- `assets/templates/service-template.ts.md` - Service class template
- `assets/tsconfig-presets/strict.json` - Maximum strictness config
- `assets/tsconfig-presets/recommended.json` - Balanced defaults

© agent-skills · MIT · jwynia/agent-skills

Похожие скиллы

Все скиллы по теме «Языки программирования» →

Сначала — typescript-best-practices от других авторов.

typescript-best-practices cursor Скилл задаёт агенту правила работы с типами в .ts и .tsx: дискриминированные объединения, брендированные типы, проверка на границах. CX Codex +1 7 900установок migrate-to-shoehorn Matt Pocock Переводит type assertions с as в тестах на функции из @total-typescript/shoehorn. Нужен для частичных объектов и намеренно неверных данных в проверках. 475 388установок write-swift emilkowalski Скилл помогает писать, проверять и переносить код на Swift с учётом модели языка. Подойдёт, когда нужно разобраться с конкурентностью, ошибкой или циклом удержания объектов. CX Codex +1 119 300установок megacave JuliusBrussee Переводит ответы ассистента на классический китайский язык (вэньянь) для экономии места на экране. Активируется командами /megacave или /caveman wenyan. CX Codex +1 25 400установок find-docs upstash Тянет актуальную документацию, справочники API и примеры кода для любой библиотеки через Context7 CLI. Пригодится, когда агент отвечает по устаревшим данным обучения. CX Codex +1 9 400установок typescript-advanced-types Seth Hobson Помогает агенту писать сложную типизацию TypeScript: generics, conditional types и преобразования типов. Нужен для библиотек, API-клиентов и строгих конфигураций. CX Codex 92 169установок smart-explore thedotmack Структурно ищет функции и классы через tree-sitter. Пригодится, когда нужно разобраться в кодовой базе без чтения всех файлов. CX Codex +1 7 300установок

Из того же набора91

systemic-worldbuilding Разворачивает цепочки последствий фантастического допущения для проработки сеттинга в литературе и играх. Помогает просчитать влияние технологий или магии на общество. CX Codex +1 620установок skill-builder Генерирует структуру новых скиллов, проверяет их полноту по шкале зрелости и помогает описать диагностические сценарии для агентов. CX Codex +1 614установок character-arc Помогает продумать внутренний путь героя и найти, почему перемена в финале не убеждает. CX Codex +1 614установок story-collaborator Помогает писать художественную прозу в паре с моделью: генерирует черновики сцен, варианты диалогов и сюжетные ходы, сохраняя стиль автора. CX Codex +1 607установок task-decomposition Делит крупные фичи и эпики на автономные куски до 2–3 дней работы. Помогает, когда объём задачи неясен, а зависимости блокируют процесс. CX Codex +1 593установок interactive-fiction Разбирает проблемы ветвящегося нарратива: выборы без последствий, неразрешимое ветвление, конфликт свободы игрока и авторской истории. CX Codex +1 558установок prose-style Разбирает проблемы на уровне предложений: монотонность, плоские фразы, лишние эпитеты, скачки голоса. Полезен, когда структура уже готова. CX Codex +1 553установок pptx-generator Собирает презентации PowerPoint из шаблона с подстановкой текста или с нуля по JSON-описанию. Пригодится, когда отчёт или питч-дек нужно собрать кодом, а не руками в PowerPoint. CX Codex +1 541установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой