"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Compreendendo a palavra-chave infer no TypeScript

Compreendendo a palavra-chave infer no TypeScript

Publicado em 2024-11-03
Navegar:759

Understanding the infer Keyword in TypeScript

TypeScript, um superconjunto de JavaScript digitado estaticamente, ganhou enorme popularidade na comunidade de tecnologia devido à sua capacidade de detectar erros antecipadamente e melhorar a legibilidade do código. Um dos recursos poderosos do TypeScript é a palavra-chave infer, que permite aos desenvolvedores escrever tipos mais expressivos e dinâmicos.

A palavra-chave inferida

Introduzida no TypeScript 2.8, a palavra-chave infer é usada em tipos condicionais para criar variáveis ​​de tipo temporárias. Essas variáveis ​​de tipo podem então ser usadas para inferir tipos dentro de uma ramificação verdadeira ou falsa de um tipo condicional. A palavra-chave infer permite que os desenvolvedores escrevam tipos mais dinâmicos e expressivos, pois permite que o TypeScript determine um tipo específico com base no contexto em que é usado.

Para entender melhor como inferir funciona, vamos dar uma olhada na sintaxe básica de um tipo condicional:

type MyConditionalType = T extends SomeType ? TrueType : FalseType;

Neste exemplo, T é um parâmetro de tipo genérico e SomeType representa um tipo ao qual T está sendo comparado. Se T estender SomeType, o tipo de MyConditionalType será TrueType. Caso contrário, será FalseType.

Agora, vamos introduzir a palavra-chave infer na mistura:

type MyInferredType = T extends SomeType ? U : FalseType;

Aqui, usamos a palavra-chave infer para criar uma variável de tipo temporária U dentro do ramo verdadeiro do tipo condicional. Se T estender SomeType, o TypeScript tentará inferir o tipo de U com base no tipo de T.

Exemplos

Tipo de Retorno

ReturnType é um tipo de utilitário que extrai o tipo de retorno de uma função. É um exemplo perfeito de como a palavra-chave infer pode ser usada para criar tipos dinâmicos. Aqui está a definição de ReturnType:

type ReturnType any> = T extends (...args: any[]) => infer R ? R : any;

Nesta definição, T é um tipo de função que recebe qualquer número de argumentos e retorna qualquer tipo. Usando a palavra-chave infer, criamos uma variável de tipo temporária R para representar o tipo de retorno da função. Se T for uma função, o TypeScript infere o tipo de retorno e o atribui a R.

Vamos ver o ReturnType em ação:

function greet(name: string): string {
  return `Hello, ${name}!`;
}
​
type GreetReturnType = ReturnType; // GreetReturnType is inferred as 'string'

Aqui, ReturnType é usado para inferir o tipo de retorno da função greet, que é string.

Parâmetros

Outro tipo de utilitário útil que aproveita a palavra-chave infer é Parâmetros. Este tipo extrai os tipos de parâmetros de uma função como uma tupla. A definição de Parâmetros é a seguinte:

type Parameters any> = T extends (...args: infer P) => any ? P : never;

Neste exemplo, criamos uma variável de tipo temporária P para representar os tipos de parâmetros da função. Se T for uma função, o TypeScript infere os tipos de parâmetros e os atribui a P como uma tupla.

Vejamos um exemplo usando parâmetros:

function add(a: number, b: number): number {
  return a   b;
}
​
type AddParameters = Parameters; // AddParameters is inferred as [number, number]

Aqui, Parâmetros é usado para inferir os tipos de parâmetros da função add, que é uma tupla [número, número].

Tipo de promessa

O tipo de utilitário PromiseType pode ser usado para extrair o tipo para o qual uma Promise resolve. Isto é particularmente útil ao lidar com funções assíncronas. Aqui está a definição de PromiseType:

type PromiseType> = T extends Promise ? U : never;

Neste exemplo, criamos uma variável de tipo temporária U para representar o tipo para o qual a Promise resolve. Se T for uma promessa, o TypeScript infere o tipo resolvido e o atribui a U. Aqui está um exemplo:

async function fetchData(): Promise {
  return "Fetched data";
}
​
type FetchedDataType = PromiseType>; // FetchedDataType is inferred as 'string'

Nesse caso, PromiseType é usado para inferir o tipo para o qual a promessa da função fetchData resolve, que é string.

UnboxArray

O tipo de utilitário UnboxArray pode ser usado para extrair o tipo dos elementos dentro de um array. Aqui está a definição de UnboxArray:

type UnboxArray> = T extends Array ? U : never;

Neste exemplo, criamos uma variável de tipo temporária U para representar o tipo dos elementos dentro do array. Se T for um array, o TypeScript infere o tipo de elemento e o atribui a U. Por exemplo:

type MyArray = number[];

type ElementType = UnboxArray; // ElementType is inferred as 'number'

Aqui, UnboxArray é usado para inferir o tipo de elementos dentro do tipo MyArray, que é número.

Limitações

Embora a palavra-chave inferir seja incrivelmente poderosa, ela tem algumas limitações:

  1. Só pode ser usado em tipos condicionais.

  2. Nem sempre é possível para o TypeScript inferir o tipo correto, especialmente ao lidar com tipos complexos ou recursivos. Nesses casos, os desenvolvedores podem precisar fornecer anotações de tipo adicionais ou refatorar seus tipos para ajudar o TypeScript a inferir o tipo correto.

Conclusão

Ao compreender e aproveitar o poder da inferência, você pode criar projetos TypeScript mais flexíveis. Comece a considerar incorporar a palavra-chave infer em seu kit de ferramentas hoje mesmo.

Se você achou isso útil, considere assinar meu boletim informativo para artigos e ferramentas mais úteis sobre desenvolvimento web. Obrigado por ler!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/zacharylee/understanding-the-infer-keyword-in-typescript-20mg?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3