Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/franrom/pupila/typescript-advanced-typesnpx skills add FranRom/pupila --skill typescript-advanced-typesgit clone --depth 1 https://github.com/FranRom/pupilaWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/franrom/pupila/typescript-advanced-types)<a href="https://agentmods.dev/skills/franrom/pupila/typescript-advanced-types"><img src="https://agentmods.dev/badge/skills/franrom/pupila/typescript-advanced-types.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00057 | $0.04422 |
| Opus 5 | $0.00028 | $0.02211 |
| Sonnet 5 | $0.00011 | $0.00884 |
| Haiku 4.5 | $0.00006 | $0.00442 |
Grade A, and why
typescript-advanced-types scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 720 lines — stays where its author put it; the contents beside it link to each section on GitHub.
TypeScript Advanced Types
Guidance for TS advanced types: generics, conditional types, mapped types, template literal types, utility types. Build type-safe apps.
When to Use This Skill
- Type-safe libraries/frameworks
- Reusable generic components
- Complex type inference logic
- Type-safe API clients
- Form validation systems
- Strongly-typed config objects
- Type-safe state management
- JS → TS migration
Core Concepts
1. Generics
Purpose: Reusable, type-flexible components. Keep type safety.
Basic Generic Function:
function identity<T>(value: T): T {
return value;
}
const num = identity<number>(42); // Type: number
const str = identity<string>("hello"); // Type: string
const auto = identity(true); // Type inferred: boolean
Generic Constraints:
interface HasLength {
length: number;
}
function logLength<T extends HasLength>(item: T): T {
console.log(item.length);
return item;
}
logLength("hello"); // OK: string has length
logLength([1, 2, 3]); // OK: array has length
logLength({ length: 10 }); // OK: object has length
// logLength(42); // Error: number has no length
Multiple Type Parameters:
function merge<T, U>(obj1: T, obj2: U): T & U {
return { ...obj1, ...obj2 };
}
const merged = merge({ name: "John" }, { age: 30 });
// Type: { name: string } & { age: number }
2. Conditional Types
Purpose: Types depend on conditions. Enables type logic.
Basic Conditional Type:
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
Extracting Return Types:
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
function getUser() {
return { id: 1, name: "John" };
}
type User = ReturnType<typeof getUser>;
// Type: { id: number; name: string; }
Distributive Conditional Types:
When a naked type parameter in a conditional type receives a union, the conditional distributes over each member of the union, then results re-union.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 720 lines · 57 tokens per session scan A 51830693bc96
typescript-advanced-types is a skill published in the GitHub repository FranRom/pupila (36 stars, last pushed 2mo ago), licensed MIT. It adds 57 tokens to every session and 4,422 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
pinme-email
Use this skill when a PinMe project (Worker TypeScript) needs to integrate email sending (sendemail). Guides AI to generate correct Worker TS code.
typescript-strict
Use this skill when writing or reviewing TypeScript code with strict mode in WrongStack. Triggers: user mentions "TypeScript", "strict", "type error", "type safety", "narrowing", "branded type", "discriminated union", "noUncheckedIndexedAccess".
node-modern
Use this skill when writing, reviewing, or refactoring Node.js >= 22 TypeScript code in WrongStack. Triggers: ESM imports, fetch usage, AbortSignal, node: protocol, Web Streams, or any async patterns.
ts-review
TypeScript monorepo 审查:XSS、SQL 注入、密钥、any、console.log.
nodejs-backend
Node.js backend patterns: layered architecture, TypeScript, validation, error handling, security, observability, logging, metrics, deployment. Use when building REST APIs, REST endpoints, middleware, Express/Fastify/Hono/NestJS/Koa servers, tRPC procedures, Bun servers, or server-side TypeScript.
javascript-sast
JavaScript and Node.js security scanning. Checks dependency vulnerabilities via npm audit and source patterns for XSS, eval, and prototype pollution.