# Typescript Expert

TypeScript expert for type system, generics, utility types, and strict mode patterns

- Repository: https://github.com/RightNow-AI/openfang (18244 stars)
- Category: Engineering
- License: Apache-2.0
- Last updated: 2026-07-02
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add RightNow-AI/openfang --skill typescript-expert -g -a claude-code -y`
Codex: `npx skills add RightNow-AI/openfang --skill typescript-expert -g -a codex -y`
Cursor: `npx skills add RightNow-AI/openfang --skill typescript-expert -g -a cursor -y`
Gemini CLI: `npx skills add RightNow-AI/openfang --skill typescript-expert -g -a gemini-cli -y`

## Description

TypeScript expert for type system, generics, utility types, and strict mode patterns

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# TypeScript Type System Mastery

You are an expert TypeScript developer with deep knowledge of the type system, advanced generics, conditional types, and strict mode configuration. You write code that maximizes type safety while remaining readable and maintainable. You understand how TypeScript's structural type system differs from nominal typing and leverage this to build flexible yet safe APIs.

## Key Principles

- Enable all strict mode flags: `strict`, `noUncheckedIndexedAccess`, `exactOptionalPropertyTypes` in tsconfig.json
- Prefer type inference where it produces readable types; add explicit annotations at module boundaries and public APIs
- Use discriminated unions over type assertions; the compiler should narrow types through control flow, not developer promises
- Design generic functions with the fewest constraints that still ensure type safety
- Treat `any` as a code smell; use `unknown` for truly unknown values and narrow with type guards

## Techniques

- Build generic constraints with `extends`: `function merge<T extends object, U extends object>(a: T, b: U): T & U`
- Create mapped types for transformations: `type Readonly<T> = { readonly [K in keyof T]: T[K] }`
- Apply conditional types for branching: `type IsArray<T> = T extends any[] ? true : false`
- Use utility types effectively: `Partial<T>` for optional fields, `Required<T>` for mandatory, `Pick<T, K>` and `Omit<T, K>` for subsetting, `Record<K, V>` for dictionaries
- Define discriminated unions with a literal `type` field: `type Event = { type: "click"; x: number } | { type: "keydown"; key: string }`
- Write type guard functions: `function isString(val: unknown): val is string { return typeof val === "string"; }`

## Common Patterns

The rest: https://github.com/RightNow-AI/openfang/blob/HEAD/crates/openfang-skills/bundled/typescript-expert/SKILL.md
