typescript-advanced-types
Faz seu agente usar tipos avançados no TypeScript. Isso garante que o código seja mais seguro e confiável.
O que ela faz
Este guia ensina como usar recursos avançados do TypeScript para criar código mais seguro e flexível. Ele cobre como fazer tipos que se adaptam a diferentes dados (genéricos), como criar tipos que mudam com base em condições, como transformar tipos existentes e como criar tipos baseados em texto.
Quando usar
- ✓Ao criar bibliotecas de código que outras pessoas usarão.
- ✓Quando você precisa que seu código seja muito seguro contra erros.
- ✓Ao construir sistemas complexos onde os tipos de dados precisam ser bem definidos.
Exemplo do que pedir para a IA
“Como posso criar um tipo que só aceite números ou strings?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
O TypeScript permite definir regras para os tipos de dados. Recursos como genéricos e tipos condicionais ajudam a criar essas regras de forma automática e flexível, garantindo que os dados usados estejam corretos antes mesmo de executar o programa.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill typescript-advanced-typesOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/javascript-typescript/skills/typescript-advanced-types/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Tipos Avançados em TypeScript
Um guia completo para dominar o sistema de tipos avançados do TypeScript, incluindo genéricos, tipos condicionais, tipos mapeados, tipos de literais de template e tipos utilitários para construir aplicações robustas e com segurança de tipos.
Quando Usar Esta Habilidade
- Construir bibliotecas ou frameworks com segurança de tipos
- Criar componentes genéricos reutilizáveis
- Implementar lógica complexa de inferência de tipos
- Projetar clientes de API com segurança de tipos
- Construir sistemas de validação de formulários
- Criar objetos de configuração fortemente tipados
- Implementar gerenciamento de estado com segurança de tipos
- Migrar bases de código JavaScript para TypeScript
Conceitos Essenciais
1. Genéricos
Propósito: Criar componentes reutilizáveis e flexíveis em termos de tipos, mantendo a segurança de tipos.
Função Genérica Básica:
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
Restrições Genéricas:
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
Múltiplos Parâmetros de Tipo:
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. Tipos Condicionais
Propósito: Criar tipos que dependem de condições, permitindo lógica de tipos sofisticada.
Tipo Condicional Básico:
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
Extraindo Tipos de Retorno:
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; }
Tipos Condicionais Distributivos:
type ToArray<T> = T extends any ? T[] : never;
type StrOrNumArray = ToArray<string | number>;
// Type: string[] | number[]
Condições Aninhadas:
type TypeName<T> = T extends string
? "string"
: T extends number
? "number"
: T extends boolean
? "boolean"
: T extends undefined
? "undefined"
: T extends Function
? "function"
: "object";
type T1 = TypeName<string>; // "string"
type T2 = TypeName<() => void>; // "function"
3. Tipos Mapeados
Propósito: Transformar tipos existentes iterando sobre suas propriedades.
Tipo Mapeado Básico:
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
interface User {
id: number;
name: string;
}
type ReadonlyUser = Readonly<User>;
// Type: { readonly id: number; readonly name: string; }
Propriedades Opcionais:
type Partial<T> = {
[P in keyof T]?: T[P];
};
type PartialUser = Partial<User>;
// Type: { id?: number; name?: string; }
Remapeamento de Chaves:
type Getters<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
};
interface Person {
name: string;
age: number;
}
type PersonGetters = Getters<Person>;
// Type: { getName: () => string; getAge: () => number; }
Filtrando Propriedades:
type PickByType<T, U> = {
[K in keyof T as T[K] extends U ? K : never]: T[K];
};
interface Mixed {
id: number;
name: string;
age: number;
active: boolean;
}
type OnlyNumbers = PickByType<Mixed, number>;
// Type: { id: number; age: number; }
4. Tipos de Literais de Template
Propósito: Criar tipos baseados em strings com correspondência de padrões e transformação.
Literal de Template Básico:
type EventName = "click" | "focus" | "blur";
type EventHandler = `on${Capitalize<EventName>}`;
// Type: "onClick" | "onFocus" | "onBlur"
Manipulação de Strings:
type UppercaseGreeting = Uppercase<"hello">; // "HELLO"
type LowercaseGreeting = Lowercase<"HELLO">; // "hello"
type CapitalizedName = Capitalize<"john">; // "John"
type UncapitalizedName = Uncapitalize<"John">; // "john"
Construção de Caminhos:
type Path<T> = T extends object
? {
…
Perguntas frequentes
O que são genéricos?
Genéricos são como 'espaços reservados' para tipos. Eles permitem criar funções ou classes que funcionam com qualquer tipo de dado, mas ainda assim garantem que o tipo usado seja o correto.
O que são tipos condicionais?
São tipos que se comportam de maneira diferente dependendo de uma condição. Por exemplo, um tipo pode ser 'verdadeiro' se o dado for uma string, e 'falso' se for um número.
Para que servem os tipos de template literal?
Eles permitem criar tipos baseados em strings, como criar nomes de eventos (`onClick`) a partir de um nome base (`click`), ou construir caminhos de configuração de forma segura.
Detalhes
Descrição original do autor
Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications. Use when implementing complex type logic, creating reusable type utilities, or ensuring compile-time type safety in TypeScript projects.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4882
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC