Recapitulação: Refinando Tipos
Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 73 de 73.
Desafio
FácilCrie um sistema de gerenciamento de configurações que processe configurações dinâmicas usando assinaturas de índice, guardas de tipo e asserções de tipo.
Crie uma interface chamada AppConfig que use uma assinatura de índice para mapear chaves do tipo string para valores do tipo string | number | boolean.
Crie uma função chamada validateConfigValue que:
- Receba dois parâmetros:
configdo tipoAppConfigekeydo tipostring - Retorne
"missing"se a chave não existir na configuração - Use guardas de tipo para verificar o tipo real do valor
- Retorne
"string"se o valor for uma string - Retorne
"number"se o valor for um número - Retorne
"boolean"se o valor for um booleano - Tenha um tipo de retorno explícito
string
Crie uma função chamada getConfigAsString que:
- Receba dois parâmetros:
configdo tipoAppConfigekeydo tipostring - Retorne
"undefined"se a chave não existir - Use uma asserção de tipo para tratar o valor como
stringe retorná-lo se o valor existir - Tenha um tipo de retorno explícito
string
Crie uma função chamada processConfig que:
- Receba dois parâmetros:
configdo tipoAppConfigekeydo tipostring - Use
validateConfigValuepara verificar o tipo - Retorne o valor convertido para maiúsculas se for uma string
- Retorne o valor multiplicado por 10 se for um número
- Retorne o valor booleano oposto se for um booleano
- Retorne
nullse a chave estiver ausente - Tenha um tipo de retorno explícito
string | number | boolean | null
Crie dados de teste:
- Crie
settingsdo tipoAppConfigcom:"appName":"MyApp""version":2.1"debugMode":true"maxUsers":100"theme":"dark"
Teste suas funções e exiba as seguintes saídas:
- Chame
validateConfigValuecomsettingse"appName" - Chame
validateConfigValuecomsettingse"version" - Chame
validateConfigValuecomsettingse"debugMode" - Chame
validateConfigValuecomsettingse"timeout" - Chame
getConfigAsStringcomsettingse"theme" - Chame
getConfigAsStringcomsettingse"missing" - Chame
processConfigcomsettingse"appName" - Chame
processConfigcomsettingse"maxUsers" - Chame
processConfigcomsettingse"debugMode" - Chame
processConfigcomsettingse"invalid"
Experimente você mesmo
// TODO: Escreva seu código aqui
// Crie a interface AppConfig
// Crie a função validateConfigValue
// Crie a função getConfigAsString
// Crie a função processConfig
// Crie os dados de teste - objeto settings
// Teste as funções e imprima os resultados
console.log(validateConfigValue(settings, "appName"));
console.log(validateConfigValue(settings, "version"));
console.log(validateConfigValue(settings, "debugMode"));
console.log(validateConfigValue(settings, "timeout"));
console.log(getConfigAsString(settings, "theme"));
console.log(getConfigAsString(settings, "missing"));
console.log(processConfig(settings, "appName"));
console.log(processConfig(settings, "maxUsers"));
console.log(processConfig(settings, "debugMode"));
console.log(processConfig(settings, "invalid"));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 Tipos8Enums
O que é um Enum Numérico?Usando Enums NuméricosO que é um Enum de String?Usando Enums de StringEnums HeterogêneosRecapitulação: Usando Enums11Tópicos Avançados
Asserções de TipoType Guards: in & instanceofO Tipo 'never'Tipos Anuláveis ('strictNull')Assinaturas de Índice para ObjetosRecapitulação: Refinando 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 TuplasPratique por conta própria: Playground de TypeScript