Menu
CoddyTech

Recapitulação: Refinando Tipos

Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 73 de 73.

challenge icon

Desafio

Fácil

Crie 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: config do tipo AppConfig e key do tipo string
  • 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: config do tipo AppConfig e key do tipo string
  • Retorne "undefined" se a chave não existir
  • Use uma asserção de tipo para tratar o valor como string e 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: config do tipo AppConfig e key do tipo string
  • Use validateConfigValue para 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 null se a chave estiver ausente
  • Tenha um tipo de retorno explícito string | number | boolean | null

Crie dados de teste:

  • Crie settings do tipo AppConfig com:
    • "appName": "MyApp"
    • "version": 2.1
    • "debugMode": true
    • "maxUsers": 100
    • "theme": "dark"

Teste suas funções e exiba as seguintes saídas:

  • Chame validateConfigValue com settings e "appName"
  • Chame validateConfigValue com settings e "version"
  • Chame validateConfigValue com settings e "debugMode"
  • Chame validateConfigValue com settings e "timeout"
  • Chame getConfigAsString com settings e "theme"
  • Chame getConfigAsString com settings e "missing"
  • Chame processConfig com settings e "appName"
  • Chame processConfig com settings e "maxUsers"
  • Chame processConfig com settings e "debugMode"
  • Chame processConfig com settings e "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

Pratique por conta própria: Playground de TypeScript