Usando uma Função Genérica
Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 59 de 73.
Há duas maneiras de usar uma função genérica: com argumentos de tipo explícitos ou deixando o TypeScript inferir o tipo automaticamente.
Veja como você pode chamar uma função genérica com argumentos de tipo explícitos:
const result1 = wrapInObject<string>("hello");
const result2 = wrapInObject<number>(42);<string> e <number> informam explicitamente ao TypeScript qual tipo usar para T. Isso oferece controle total sobre o parâmetro de tipo.
No entanto, o TypeScript é inteligente o suficiente para inferir o tipo a partir do argumento que você passa na maioria dos casos:
const result1 = wrapInObject("hello"); // T inferred as string
const result2 = wrapInObject(42); // T inferred as numberA inferência de tipos torna seu código mais limpo e legível, mantendo a mesma segurança de tipos. O TypeScript analisa o argumento e determina automaticamente qual deve ser o T, portanto, você não precisa escrever a anotação de tipo explícita, a menos que queira substituir o tipo inferido.
Desafio
FácilVocê recebe o seguinte do desafio anterior:
- A função genérica
wrapInObject<T>que recebe um item do tipoTe retorna{ value: T }
Chame a função wrapInObject usando tanto argumentos de tipo explícitos quanto inferência de tipo:
Usando argumentos de tipo explícitos:
- Crie uma variável
explicitStringchamandowrapInObject<string>com"TypeScript" - Crie uma variável
explicitNumberchamandowrapInObject<number>com25 - Crie uma variável
explicitBooleanchamandowrapInObject<boolean>comfalse
Usando inferência de tipo:
- Crie uma variável
inferredStringchamandowrapInObjectcom"Generics"(deixe o TypeScript inferir o tipo) - Crie uma variável
inferredNumberchamandowrapInObjectcom99(deixe o TypeScript inferir o tipo) - Crie uma variável
inferredBooleanchamandowrapInObjectcomtrue(deixe o TypeScript inferir o tipo)
Imprima as seguintes saídas:
- Imprima
explicitString.value - Imprima
explicitNumber.value - Imprima
explicitBoolean.value - Imprima
inferredString.value - Imprima
inferredNumber.value - Imprima
inferredBoolean.value
Experimente você mesmo
// Função genérica do desafio anterior
function wrapInObject<T>(item: T): { value: T } {
return { value: item };
}
// TODO: Escreva seu código aqui
// Crie variáveis usando argumentos de tipo explícitos
// Crie variáveis usando inferência de tipos
// Imprima os resultadosEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Introdução ao TypeScript
1Primeiros Passos com TS
O que é TypeScript?Por que usar TypeScript?Seu Primeiro Código TypeScriptProcesso de Compilação e ErrosRecapitulação: Introdução ao TS4Trabalhando com Funções
Tipagem de Parâmetros e RetornosTipagem de Arrow FunctionsO Tipo de Retorno 'void'Parâmetros Opcionais com '?'Valores Padrão de ParâmetrosTipagem de Rest ParametersDefinindo Tipos de FunçõesRecapitulação: Criando Funções Tipadas2Tipos Principais
Tipos Básicos: str, num, booleanO Tipo 'any': Válvula de EscapeO Tipo 'unknown'Trabalhando com 'null' e 'undef'Inferência de Tipo na PráticaAnotações de Tipo ExplícitasRecapitulação: Prática de Tipos Principais5Tipos: Aliases, Uniões e Interseções
Aliases de Tipos para PrimitivosTipos de União ('|')Trabalhando com Tipos de UniãoTipos LiteraisTipos de Interseção ('&')Combinando Aliases de TiposRecapitulação: Combinações Avançadas de Tipos3Estrutura de Dados: Arrays e Tuplas
Arrays TipadosModificador 'readonly' para ArraysO que é uma Tupla?Declarando e Acessando TuplasDesestruturando TuplasTuplas ReadonlyArrays Tipados MultidimensionaisSpread Operator com ArraysRecapitulação: Arrays e Tuplas6Tipagem de Objetos e Interfaces
Anotações de Tipo de Objeto InlineType Aliases para ObjetosIntrodução a InterfacesInterfaces vs. Type AliasesProps Opcionais e ReadonlyEstendendo Interfaces e TiposAdicionando Métodos a InterfacesRecapitulação: Definindo Formatos de Objetos9Generics: Uma Primeira Olhada
O Problema que Generics ResolvemCriando uma Função de Identidade GenéricaUsando uma Função GenéricaArrays GenéricosInterfaces GenéricasRecapitulação: Prática de Funções GenéricasPratique por conta própria: Playground de TypeScript