0Pricing
TypeScript Academy · Aula

Funções de guarda de tipos definidas pelo usuário

Escreva predicados is para criar guardas de tipos personalizadas

Funções de guarda de tipos definidas pelo usuário é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 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 proteções de tipo definidas pelo usuário permitem encapsular uma verificação de refinamento em uma função reutilizável usando o tipo de retorno de predicado `is`.

O tipo de retorno de predicado is

Uma função de proteção de tipo retorna `paramName is Type`. Quando a função retorna true, TypeScript refina o parâmetro para esse tipo.
function isString(val: unknown): val is string {
  return typeof val === 'string';
}

Uso de uma proteção de tipo

Chame a proteção de tipo em uma condição if. TypeScript refina o tipo dentro do bloco.
function process(val: unknown) {
  if (isString(val)) {
    console.log(val.toUpperCase()); // val: string
  }
}

Proteção de tipo para interfaces

Como não pode usar instanceof com interfaces, as proteções de tipo são a principal forma de refinar uniões de interfaces.
interface Cat { meow(): void }
interface Dog { bark(): void }
function isCat(pet: Cat | Dog): pet is Cat {
  return 'meow' in pet;
}

Proteções de tipo para objetos complexos

Escreva uma proteção de tipo que valide a estrutura de um objeto durante a execução antes de usá-lo como um tipo específico.
interface User { name: string; age: number; }
function isUser(val: unknown): val is User {
  return (
    typeof val === 'object' &&
    val !== null &&
    typeof (val as any).name === 'string' &&
    typeof (val as any).age === 'number'
  );
}

Proteções de tipo versus asserções

As proteções de tipo verificam durante a execução. As asserções de tipo (as Type) existem apenas durante a compilação e podem estar erradas. Prefira proteções para dados externos.

Array.isArray como proteção de tipo

Array.isArray é uma proteção de tipo integrada. TypeScript entende isso e faz o refinamento correspondente.
function flatten(val: string | string[]): string[] {
  return Array.isArray(val) ? val : [val];
}

Proteções de tipo genéricas

As proteções de tipo podem ser genéricas para criar verificadores reutilizáveis durante a execução.
function isNonNull<T>(val: T | null | undefined): val is T {
  return val !== null && val !== undefined;
}
const values = [1, null, 2, undefined].filter(isNonNull);
// values: number[]

Funções de asserção

As funções de asserção (que usam asserts) lançam uma exceção se a condição for falsa e refinam o tipo depois da chamada.
function assertIsString(val: unknown): asserts val is string {
  if (typeof val !== 'string') throw new TypeError('Not a string');
}
assertIsString(input);
console.log(input.toUpperCase()); // narrowed to string

A responsabilidade das proteções de tipo

TypeScript confia completamente nos valores retornados pelas proteções de tipo. Se a sua proteção estiver errada, TypeScript não detectará a incompatibilidade durante a compilação.

Proteções de tipo em filter e find

Passe proteções de tipo diretamente para array.filter para refinar o tipo do resultado.
const mixed: (string | null)[] = ['a', null, 'b'];
const strings = mixed.filter((x): x is string => x !== null);
// strings: string[]

Verificação rápida

Qual anotação de tipo de retorno identifica uma função como uma proteção de tipo de TypeScript?

Recapitulação

As proteções de tipo definidas pelo usuário usam tipos de retorno `param is Type` para encapsular a lógica de refinamento. Elas funcionam com filter/find, permitem refinar interfaces e podem ser genéricas. As funções de asserção refinam o tipo sem retornar um booleano.

Perguntas Frequentes

A aula “Funções de guarda de tipos definidas pelo usuário” é grátis?

Sim — o texto completo de “Funções de guarda de tipos definidas pelo usuário” é 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 “Funções de guarda de tipos definidas pelo usuário”?

Escreva predicados is para criar guardas de tipos personalizadas 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 3 de 4.

Quanto tempo leva a aula “Funções de guarda de tipos definidas pelo usuário”?

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. typeof e restrição por veracidade
  2. instanceof e in na restrição de tipos
  3. Funções de guarda de tipos definidas pelo usuário
  4. Verificação de exaustividade com never
← Voltar para TypeScript Academy