0Pricing
TypeScript Academy · Aula

Restrições genéricas: restringindo parâmetros de tipo

Utilize extends para impor requisitos de formato aos genéricos

Restrições genéricas: restringindo parâmetros de tipo é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.

Boas-vindas

As restrições genéricas avançadas permitem limitar quais tipos podem ser usados como argumentos de tipo, possibilitando operações com segurança de tipos em estruturas complexas.

Recapitulação das restrições

T extends U restringe T a tipos que são subtipos de U. Isso fornece ao TypeScript informações sobre a estrutura de T dentro da função.
function len<T extends { length: number }>(val: T): number {
  return val.length;
}

Restringindo a métodos específicos

Exija que T tenha um método específico, restringindo-o a uma interface que contenha esse método.
interface Stringable { toString(): string; }
function stringify<T extends Stringable>(val: T): string {
  return val.toString();
}

Inferindo a partir de uma restrição

Use keyof dentro da restrição para criar acessadores seguros.
function pluck<T, K extends keyof T>(items: T[], key: K): T[K][] {
  return items.map(item => item[key]);
}
const names = pluck(users, 'name'); // string[]

Restrições de tipos de ordem superior (simuladas)

O TypeScript não oferece suporte a tipos de ordem superior genuínos, mas você pode simulá-los com tipos condicionais e restrições.

Restringindo a tipos primitivos

Restrinja os parâmetros de tipo a tipos primitivos específicos para criar funções especializadas.
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
function isPrimitive<T extends Primitive>(val: T): true { return true; }

Restrições recursivas

As restrições podem referenciar a si mesmas para criar padrões recursivos.
interface Comparable<T> { compareTo(other: T): number; }
function sort<T extends Comparable<T>>(items: T[]): T[] {
  return [...items].sort((a, b) => a.compareTo(b));
}

Restrição com valor padrão

Um parâmetro de tipo pode ter tanto uma restrição quanto um valor padrão. O padrão deve satisfazer a restrição.
function process<T extends object = Record<string, unknown>>(data: T): void {
  console.log(Object.keys(data));
}

T extends Record<string, unknown>

Restrinja a um tipo de registro para habilitar o acesso dinâmico a propriedades.
function getValue<T extends Record<string, unknown>>(obj: T, key: string): unknown {
  return obj[key];
}

Inferência de restrições nos tipos de retorno

Quando T é restringido, o TypeScript usa a restrição para determinar as operações válidas no tipo de retorno.
function firstKey<T extends object>(obj: T): keyof T {
  return Object.keys(obj)[0] as keyof T;
}

Utilitário NoInfer (TS 5.4)

O TypeScript 5.4 introduziu NoInfer para impedir que um parâmetro de tipo seja inferido a partir de uma posição específica do argumento.
function createState<T>(initial: T, fallback: NoInfer<T>): T {
  return initial ?? fallback;
}

Verificação rápida

O que `T extends { length: number }` acrescenta a T dentro de uma função genérica?

Recapitulação

As restrições avançadas restringem tipos genéricos a estruturas, métodos ou uniões de tipos primitivos específicos. Combine-as com keyof, padrões recursivos e valores padrão para criar utilitários poderosos com segurança de tipos.

Perguntas Frequentes

A aula “Restrições genéricas: restringindo parâmetros de tipo” é grátis?

Sim — o texto completo de “Restrições genéricas: restringindo parâmetros de tipo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.

O que vou aprender em “Restrições genéricas: restringindo parâmetros de tipo”?

Utilize extends para impor requisitos de formato aos genéricos Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar TypeScript Academy?

Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Restrições genéricas: restringindo parâmetros de tipo”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de TypeScript Academy?

Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. keyof e tipos de acesso indexado
  2. Restrições genéricas: restringindo parâmetros de tipo
  3. Tipos condicionais: T extends U ? X : Y
  4. Tipos condicionais distributivos
← Voltar para TypeScript Academy