TypeScript Academy · Aula

Utilitários Flatten e UnwrapPromise

Escreva tipos que desembrulhem estruturas genéricas aninhadas

Aula 2 de 413 etapas

Utilitários Flatten e UnwrapPromise é 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.

O problema de Flatten

Os vetores do JavaScript podem ser aninhados. Um tipo utilitário Flatten remove recursivamente as camadas de vetor de um tipo, retornando o tipo do elemento mais interno.

type Flatten<T> = T extends (infer U)[] ? Flatten<U> : T;
type A = Flatten<number[][][]>; // number
type B = Flatten<string[]>;     // string

Flatten não recursivo (um nível)

Um nivelamento de um único nível corresponde a Array.prototype.flat(1) — ele remove exatamente um nível de aninhamento.

type FlatOnce<T> = T extends (infer U)[] ? U : T;
type A = FlatOnce<number[][]>; // number[]
type B = FlatOnce<string[]>;   // string

Flatten recursivo

A versão recursiva imita Array.prototype.flat(Infinity) ao recursar até que não restem mais camadas de vetor.

type Flatten<T> = T extends (infer U)[] ? Flatten<U> : T;
type C = Flatten<boolean[][][]>; // boolean

UnwrapPromise: um nível

Remova uma única camada de Promise usando inferência.

type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
type D = UnwrapPromise<Promise<string>>; // string
type E = UnwrapPromise<number>;          // number

UnwrapPromise profundo

Remova recursivamente as camadas de promessas aninhadas — isso equivale ao Awaited integrado.

type DeepUnwrap<T> = T extends Promise<infer U> ? DeepUnwrap<U> : T;
type F = DeepUnwrap<Promise<Promise<number>>>; // number

Combinando Flatten e UnwrapPromise

Um tipo combinado trata tanto de promessas quanto de vetores, sendo útil para funções assíncronas que retornam vetores.

type Simplify<T> =
  T extends Promise<infer U> ? Simplify<U>
  : T extends (infer V)[] ? Simplify<V>
  : T;

type G = Simplify<Promise<string[][]>>; // string

Awaited<T> integrado

O TypeScript 4.5+ inclui Awaited, que remove recursivamente as camadas de tipos assimiláveis por promessa, incluindo objetos assimiláveis que não são promessas.

type H = Awaited<Promise<Promise<string>>>; // string
// Also handles custom thenables with .then()

Desembrulhando valores de Map

O mesmo padrão de inferência extrai os tipos de valor de Map.

type MapValue<T> = T extends Map<any, infer V> ? V : never;
type I = MapValue<Map<string, number[]>>; // number[]

FlattenObject: mesclando interfaces aninhadas

Um nivelador de objetos no nível de tipos mescla tipos de objetos aninhados — é mais complexo, mas útil para mesclar configurações profundas.

// This requires recursive mapped types + intersection spreading
// See the DeepPartial lesson for the base pattern

Uso prático: desembrulhando respostas de API

Remova as camadas envolventes de respostas de API aninhadas para obter o tipo de dados sem asserções de tipo manuais.

type ApiData<T> = { data: T; status: number };
type ExtractData<T> = T extends ApiData<infer D> ? D : T;
type J = ExtractData<ApiData<User[]>>; // User[]

Recapitulação: Flatten e Unwrap

Flatten e UnwrapPromise usam tipos condicionais recursivos com infer para remover camadas envolventes de tipos. Use Awaited para remover camadas de promessas e escreva uma recursão personalizada para outras estruturas.

Verificação rápida

O que Flatten retorna?

O que você aprendeu

Flatten e UnwrapPromise são tipos condicionais recursivos que removem camadas genéricas envolventes. Combine-os para simplificar tipos aninhados complexos e use o Awaited integrado para cadeias de promessas.

Grátis para começar

Aprenda TypeScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
101
Aulas
352

Perguntas Frequentes

A aula “Utilitários Flatten e UnwrapPromise” é grátis?

Sim — o texto completo de “Utilitários Flatten e UnwrapPromise” é 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 “Utilitários Flatten e UnwrapPromise”?

Escreva tipos que desembrulhem estruturas genéricas aninhadas 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 “Utilitários Flatten e UnwrapPromise”?

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. DeepPartial e DeepReadonly
  2. Utilitários Flatten e UnwrapPromise
  3. TupleToUnion e UnionToIntersection
  4. Publicando uma biblioteca de utilitários de tipos
← Voltar para TypeScript Academy