Agent-skills-standard typescript-language
Apply modern TypeScript standards for type safety and maintainability. Use when working with types, interfaces, generics, enums, unions, or tsconfig settings. (triggers: **/*.ts, **/*.tsx, tsconfig.json, type, interface, generic, enum, union, intersection, readonly, const, namespace)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.github/skills/typescript/typescript-language" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-typescript-language-806523 && rm -rf "$T"
manifest:
.github/skills/typescript/typescript-language/SKILL.mdsource content
TypeScript Language Patterns
Priority: P0 (CRITICAL)
Implementation Guidelines
- Type Annotations: Explicit params/returns. Infer locals.
- Interfaces vs Types: interface for APIs (supports declaration merging). type for unions, intersection types, mapped/conditional types.
- Strict Mode: strict: true. Null Safety: ?. and ?? — Use narrowing instead. Avoid non-null assertion (!) operator.
- Enums: Literal unions or
. No runtimeas const
.enum - Generics: Reusable, type-safe code.
- Type Guards:
,typeof
, predicates.instanceof - Utility Types:
,Partial
,Pick
,Omit
.Record - Immutability:
arrays/objects. Const Assertions:readonly
,as const
.satisfies - Template Literals:
.on${Capitalize<string>} - Discriminated Unions: Literal kind property to narrow the type safely. Switch on discriminant.
- Advanced: Mapped, Conditional, Indexed types.
- Access: Default
. Usepublic
/private
orprotected
.#private - Branded Types:
.string & { __brand: 'Id' }
Anti-Patterns
- NEVER use
: Useany
or a specific interface instead.unknown - No
: Use signatureFunction
.() => void - No
: Runtime cost.enum - No
: Avoid non-null assertion (!). Use narrowing (typeof, instanceof, if-checks).! - No Lint Disable: Fix root cause; never suppress.
Testing
- Mocking: Use
orjest.Mocked<T>
.as unknown as T - Checklist: Check method existence, match error constants, satisfy required properties.
- References: See references/TESTING.md for common issues/solutions.
Code
// Branded Type type UserId = string & { __brand: 'Id' }; // Satisfies (Validate + Infer) const cfg = { port: 3000 } satisfies Record<string, number>; // Discriminated Union type Result<T> = { kind: 'ok'; data: T } | { kind: 'err'; error: Error };
Verification
After any type change that crosses module boundaries or involves generics, unions, conditional types, or branded types: call
getDiagnostics (typescript-lsp MCP tool) to confirm no type errors before finalizing.
References
For advanced type patterns and utility types: See references/REFERENCE.md.