Utilitários Flatten e UnwrapPromise
Escreva tipos que desembrulhem estruturas genéricas aninhadas
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[]>; // stringFlatten 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[]>; // stringFlatten 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[][][]>; // booleanUnwrapPromise: 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>; // numberUnwrapPromise 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>>>; // numberCombinando 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[][]>>; // stringAwaited<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 patternUso 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.
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
- DeepPartial e DeepReadonly
- Utilitários Flatten e UnwrapPromise
- TupleToUnion e UnionToIntersection
- Publicando uma biblioteca de utilitários de tipos