Marketplace typescript-dev
TypeScript development best practices, code quality tools, and documentation templates. Activated when working with .ts, .tsx files or TypeScript projects.
install
source · Clone the upstream repo
git clone https://github.com/aiskillstore/marketplace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/cain96/typescript-dev" ~/.claude/skills/aiskillstore-marketplace-typescript-dev && rm -rf "$T"
manifest:
skills/cain96/typescript-dev/SKILL.mdsource content
TypeScript Development Expert
This skill supports TypeScript project development.
🎯 Core Rules
Package Management
- Required: Use
as package managerpnpm - Do not use
ornpmyarn
Type Safety
- tsconfig.json:
requiredstrict: true - Null Handling: Leverage optional chaining
and nullish coalescing?.?? - Imports: Use ES modules, avoid
require() - NO ANY: Do not use
type in production codeany
Best Practices
- Type Inference: Let TypeScript infer when obvious
- Generics: Use for reusable components
- Union Types: Prefer union types over enums for string literals
- Utility Types: Leverage built-in types (Partial, Pick, Omit)
Documentation
- Required: Use TSDoc format for documentation comments
- Public APIs only: Document exported functions, classes, and interfaces
- Self-documenting code: Prefer clear naming over excessive comments
- Document when necessary: Add TSDoc only when the code intent isn't obvious from the signature
🛠️ Code Quality Tools
Development Workflow
# Format code pnpm run format # Run linter pnpm run lint # Type check pnpm tsc --noEmit # Run tests with coverage pnpm test -- --coverage
🎯 Quality Checklist
Check these during code review:
- Public APIs have TSDoc comments (when intent isn't clear from signature)
- No
type usageany - Proper error handling
- Test coverage above 80%
- Type inference properly leveraged
- Utility Types utilized
- Optional chaining (
) and Nullish coalescing (?.
) used?? - ES modules used (avoid
)require()
🚀 Common Patterns
Error Handling
// Good: Clear error types class ValidationError extends Error { constructor(message: string, public field: string) { super(message); this.name = 'ValidationError'; } } // Good: Result type pattern type Result<T, E = Error> = | { success: true; data: T } | { success: false; error: E };
Async/Await
// Good: With error handling async function fetchUserData(id: string): Promise<Result<UserData>> { try { const response = await fetch(`/api/users/${id}`); const data = await response.json(); return { success: true, data }; } catch (error) { return { success: false, error: error as Error }; } }
Type Guards
// Good: Custom type guard function isUserProfile(value: unknown): value is UserProfile { return ( typeof value === 'object' && value !== null && 'id' in value && 'username' in value ); }
💡 Performance Tips
-
Avoid unnecessary re-renders (React)
- Use
for expensive componentsReact.memo - Use
/useMemo
appropriatelyuseCallback
- Use
-
Lazy Loading
- Dynamic imports for code splitting
for componentsReact.lazy()
-
Type-only imports
import type { UserProfile } from './types';
🔍 Common Anti-patterns to Avoid
❌ Don't:
// Using any type function process(data: any) { } // Implicit any function getValue(obj, key) { } // Excessive type assertions const user = data as User;
✅ Do:
// Proper type definitions function process(data: UserData) { } // Explicit types function getValue<T>(obj: T, key: keyof T) { } // Use type guards if (isUser(data)) { // data is User here }