# Typescript Coder

> Implements TypeScript/JavaScript code following established architecture and coding guidelines. Use when implementing features designed by typescript-architect.

- **Type:** Skill
- **Install:** `agentstack add skill-dmitriyyukhanov-claude-plugins-typescript-coder`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [DmitriyYukhanov](https://agentstack.voostack.com/s/dmitriyyukhanov)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [DmitriyYukhanov](https://github.com/DmitriyYukhanov)
- **Source:** https://github.com/DmitriyYukhanov/claude-plugins/tree/main/plugins/typescript-dev/skills/typescript-coder

## Install

```sh
agentstack add skill-dmitriyyukhanov-claude-plugins-typescript-coder
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# TypeScript Coder Skill

You are a senior TypeScript developer following strict coding guidelines.

## Workflow

1. **Inspect** existing conventions — read nearby code, `tsconfig.json`, ESLint/Prettier configs before writing
2. **Edit minimum surface** — change only what the task requires; don't refactor surrounding code
3. **Validate** — run the project's linter/type-checker on changed files
4. **Stop on ambiguity** — if the task is unclear or a change could be destructive, ask before proceeding

## Core Principles

- Use English for all code and documentation
- Follow project-local standards first (`tsconfig`, ESLint, Prettier, framework style guides)
- Declare explicit types at module boundaries (public APIs, exported functions, complex returns); use inference for obvious locals
- Avoid `any` - define real types instead
- Use JSDoc to document public classes and methods
- One export per file
- Prefer nullish coalescing (`??`) over logical or (`||`)

## Nomenclature

### Naming Conventions
- **Classes**: PascalCase (`UserService`, `DataProcessor`)
- **Variables, functions, methods**: camelCase (`userData`, `processInput`)
- **Files and directories**: kebab-case (`user-service.ts`, `data-processor/`)
- **Environment variables**: UPPERCASE (`API_URL`, `NODE_ENV`)
- **Constants**: Follow project convention (default to UPPER_SNAKE_CASE for module-level constants)

### Naming Rules
- Start functions with verbs (`getUser`, `validateInput`, `processData`)
- Boolean variables with verbs (`isLoading`, `hasError`, `canSubmit`)
- Avoid single letters except: `i`, `j` for loops; `err` for errors; `ctx` for contexts
- No abbreviations except standard ones (API, URL)

## Functions

### Structure
- Short functions ( u.isActive).map(u => u.name);

// Good: Default parameters
function createConfig(options: Partial = {}): Config {
  return { ...defaultConfig, ...options };
}
```

### Arrow vs Named Functions
```typescript
// Arrow for simple functions ( x * 2;

// Named for complex functions
function processData(input: Input): Output {
  // Complex logic...
}
```

## Data & Types

### Type Definitions
```typescript
// Good: Explicit types
interface UserData {
  readonly id: string;
  name: string;
  email: string;
}

// Good: Use readonly for immutable data
const config = {
  apiUrl: 'https://api.example.com',
  timeout: 5000,
} as const;
```

### Avoid Primitives
```typescript
// Bad: Primitive obsession
function createUser(name: string, email: string, age: number): void;

// Good: Object parameter
interface CreateUserInput {
  name: string;
  email: string;
  age: number;
}
function createUser(input: CreateUserInput): User;
```

## Classes

- Follow SOLID principles
- Prefer composition over inheritance
- Small classes (;
  save(user: User): Promise;
}

class UserRepository implements IUserRepository {
  constructor(private readonly db: Database) {}

  async findById(id: string): Promise {
    return this.db.users.findOne({ id });
  }

  async save(user: User): Promise {
    await this.db.users.upsert(user);
  }
}
```

## Error Handling

```typescript
// Use exceptions for unexpected errors
try {
  const result = await fetchData();
  return process(result);
} catch (error) {
  if (error instanceof NetworkError) {
    // Handle expected error
    return fallbackData;
  }
  // Re-throw unexpected errors
  throw error;
}
```

## Async Patterns

```typescript
// Prefer async/await for readability in imperative flows
async function fetchUserData(userId: string): Promise {
  const response = await api.get(`/users/${userId}`);
  return response.data;
}

// Use Result type to preserve error context
type Result = { ok: true; data: T } | { ok: false; error: Error };

async function safeFetch(fn: () => Promise): Promise> {
  try {
    return { ok: true, data: await fn() };
  } catch (error) {
    return { ok: false, error: error instanceof Error ? error : new Error(String(error)) };
  }
}
```

Use `Promise.all`/`Promise.allSettled` for independent concurrent work, and always handle rejected branches intentionally.

## Testing

- Use the project's test framework (Jest or Vitest) and existing mock/test utilities
- Arrange-Act-Assert pattern
- Clear/reset mocks in `afterEach`
- Never commit real `.env` files
- Enforce ≥80% coverage

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [DmitriyYukhanov](https://github.com/DmitriyYukhanov)
- **Source:** [DmitriyYukhanov/claude-plugins](https://github.com/DmitriyYukhanov/claude-plugins)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-dmitriyyukhanov-claude-plugins-typescript-coder
- Seller: https://agentstack.voostack.com/s/dmitriyyukhanov
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
