From context-engine
TypeScript patterns and type safety. Auto-loaded when working with .ts files, tsconfig.json, or type definition files (.d.ts).
npx claudepluginhub littlelingo/context-engine --plugin context-engineThis skill uses the workspace's default tool permissions.
- Prefer `unknown` over `any` — narrow with type guards instead of casting
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Share bugs, ideas, or general feedback.
unknown over any — narrow with type guards instead of castingsatisfies for type validation without widening: const config = { ... } satisfies Configinterface for object shapes (extendable), type for unions/intersections/mapped types{ status: 'loading' } | { status: 'done'; data: T }as casts — use type predicates (function isUser(x): x is User) or satisfies insteadreadonly for arrays/objects that shouldn't be mutated: readonly string[], Readonly<Config>strict: true in tsconfig.json — never disable individual strict checksnoUncheckedIndexedAccess: true for safer array/object accessmoduleResolution: "bundler" or "node16" over legacy "node"TItem over T, TResponse over R<T extends Record<string, unknown>> not bare <T>infer in conditional types to extract nested types: type UnwrapPromise<T> = T extends Promise<infer U> ? U : TPartial<T>, Required<T>, Pick<T, K>, Omit<T, K> for object transformationsRecord<K, V> for dictionaries — prefer over { [key: string]: V }Extract<T, U> and Exclude<T, U> for union filteringReturnType<typeof fn> to derive types from functionsParameters<typeof fn> to extract function argument typesnever in default to catch missing cases at compile timetype UserId = string & { readonly __brand: 'UserId' }const assertions for literal types: as constMap<K, V> over plain objects when keys are dynamicObject.keys() returns string[], not (keyof T)[] — use a typed wrapper or for...in?.) returns undefined, not null — check your null handlingenum generates runtime code — prefer const objects with as const for zero-cost enumsasync boundaries — re-narrow after awaitJSON.parse() returns any — always validate with a schema (zod, valibot) or type guard