Criando uma Função de Identidade Genérica
Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 58 de 73.
Aqui está a sintaxe de uma função genérica usando o exemplo clássico de identidade:
function identity(arg: T): T {
return arg;
}O <T> após o nome da função declara um parâmetro de tipo chamado T. Esse T atua como um espaço reservado que pode representar qualquer tipo. Quando você usa essa função, o TypeScript substitui T pelo tipo real com o qual você está trabalhando.
A beleza dessa abordagem é que ela preserva as informações de tipo.
Se você chamar identity("hello"), o TypeScript saberá que o tipo de retorno é string. Se você chamar identity(42), ele saberá que o tipo de retorno é number.
Você obtém toda a flexibilidade de trabalhar com vários tipos, mantendo a segurança de tipos completa.
Por convenção, T representa "Type", mas você pode usar qualquer nome que quiser para o parâmetro de tipo. O importante é que ele crie uma relação entre os tipos de entrada e de saída da sua função.
Desafio
FácilCrie uma função genérica chamada wrapInObject que aceite um argumento de qualquer tipo e retorne um objeto contendo esse valor.
A função deve:
- Usar um parâmetro de tipo genérico
T - Aceitar um parâmetro chamado
itemdo tipoT - Retornar um objeto com uma única propriedade
valuedo tipoT - Ter uma anotação explícita do tipo de retorno
Crie as seguintes variáveis para testar sua função:
wrappedString- chamewrapInObjectcom a string"Hello TypeScript"wrappedNumber- chamewrapInObjectcom o número42wrappedBoolean- chamewrapInObjectcom o booleanotrue
Imprima as seguintes saídas:
- Imprima
wrappedString.value - Imprima
wrappedNumber.value - Imprima
wrappedBoolean.value - Imprima o resultado de chamar
wrapInObjectcom a string"Generic", acessando a propriedadevalue - Imprima o resultado de chamar
wrapInObjectcom o número100, acessando a propriedadevalue
Experimente você mesmo
// TODO: Escreva seu código aqui
// Crie a função genérica wrapInObject
// TODO: Crie as variáveis de teste
// wrappedString, wrappedNumber, wrappedBoolean
// Imprima as saídas
console.log(wrappedString.value);
console.log(wrappedNumber.value);
console.log(wrappedBoolean.value);
console.log(wrapInObject("Generic").value);
console.log(wrapInObject(100).value);Esta 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: Compilador de JavaScript online