Writing typescript
Skill bg-szy/TOP-SKILLS/skills/claude-code-skills/writing-typescript
Idiomatic TypeScript development. Use when writing TypeScript code, Node.js services, React apps, or discussing TS patterns. Emphasizes strict typing, composition, and modern tooling (bun/vite).From its SKILL.md
npx -y skills add bg-szy/TOP-SKILLS --skill writing-typescriptAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
2.9 KB, 688 tokens by cl100k_base, as published. Nobody here has run it
TypeScript Development (2025)
Core Principles
- Strict typing: Enable all strict checks
- Parse, don't validate: Transform untrusted data at boundaries
- Composition over inheritance: Small, focused functions
- Explicit over implicit: No
any, preferunknown
Toolchain
bun # Runtime + package manager (fast)
vite # Frontend bundling
vitest # Testing
eslint # Linting
prettier # Formatting
Quick Patterns
Type Guards
function isUser(value: unknown): value is User {
return typeof value === "object" && value !== null && "id" in value;
}
Discriminated Unions
type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };
function processResult<T>(result: Result<T>): T {
if (result.ok) return result.value;
throw result.error;
}
Utility Types
type UserUpdate = Partial<User>;
type UserSummary = Pick<User, "id" | "name">;
type UserWithoutPassword = Omit<User, "password">;
type ReadonlyUser = Readonly<User>;
tsconfig.json Essentials
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true,
"noImplicitReturns": true,
"isolatedModules": true
}
}
References
- PATTERNS.md - Code patterns and style
- REACT.md - React component patterns
- TESTING.md - Testing with vitest
Commands
bun install # Install deps
bun run build # Build
bun test # Test
bun run lint # Lint
bun run format # Format
Gotchas
import typewithverbatimModuleSyntaxand named exports: type-only import of a value triggers errors. Fix:import { type Foo } from "mod"(inline marker).as conston object: readonly AND literal-narrowed — different fromas Foo(asserts type) orsatisfies Foo(validates without widening).satisfiesvalidates without widening;aswidens — usingaswhere you wantedsatisfiesloses literal types silently.Array<T>.includes(x)requiresxto be of typeT— narrowing-from-union doesn't work; the standard fix is a type-predicate helper.strictNullChecks: falsemakesTmeanT | null | undefinedfor ALL types — partial migrations leave types that lie about nullability.tsconfig.jsonextendsdoesn't recursively mergecompilerOptions.paths— child paths REPLACE parent paths, not merge.
What ships with it: 3 files
14.6 KB alongside SKILL.md
- PATTERNS.md5.0 KB
- REACT.md5.2 KB
- TESTING.md4.5 KB