Tipos Anuláveis ('strictNull')
Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 71 de 73.
Por padrão, o TypeScript permite que null e undefined sejam atribuídos a qualquer tipo, o que pode levar a erros de tempo de execução. A opção de compilador strictNullChecks altera esse comportamento ao tornar null e undefined seus próprios tipos distintos.
Quando o strictNullChecks está habilitado, você deve incluir explicitamente null ou undefined em suas anotações de tipo se quiser permitir esses valores:
// Sem strictNullChecks - isso seria permitido
let name: string = null; // Erro com strictNullChecks!
// Com strictNullChecks - você deve ser explícito
let name: string | null = null; // Agora isso funcionaIsso força você a lidar com possíveis valores null antes de usá-los. Você não pode chamar métodos ou acessar propriedades em um valor que pode ser null sem antes verificar:
function processName(name: string | null) {
// Isso causaria um erro
// console.log(name.toUpperCase());
// Você deve verificar primeiro
if (name !== null) {
console.log(name.toUpperCase()); // Seguro para usar
}
}Esta opção do compilador ajuda a prevenir os erros de tempo de execução comuns "Cannot read property of null" ao capturá-los em tempo de compilação, tornando seu código mais confiável e previsível.
Desafio
FácilCrie uma função que processe com segurança dados de perfil de usuário que podem conter valores null. Este desafio demonstra como o strictNullChecks força você a lidar com tipos anuláveis explicitamente.
Crie uma função chamada getUserDisplayName que:
- Recebe um parâmetro
fullNamedo tipostring | null - Retorna o nome completo se não for
null - Retorna
"Anonymous User"se o nome completo fornull - Possui um tipo de retorno explícito de
string
Crie uma segunda função chamada formatUserEmail que:
- Recebe um parâmetro
emaildo tipostring | null - Retorna o e-mail em letras minúsculas se não for
null - Retorna
"No email provided"se o e-mail fornull - Possui um tipo de retorno explícito de
string
Crie uma terceira função chamada getUserInfo que:
- Recebe dois parâmetros:
namedo tipostring | nulleemaildo tipostring | null - Usa ambas as funções anteriores para processar os parâmetros
- Retorna uma string formatada:
"Name: [processed name], Email: [processed email]" - Possui um tipo de retorno explícito de
string
Teste suas funções com os seguintes dados:
- Chame
getUserDisplayName("John Smith")e imprima o resultado - Chame
getUserDisplayName(null)e imprima o resultado - Chame
formatUserEmail("ALICE@EXAMPLE.COM")e imprima o resultado - Chame
formatUserEmail(null)e imprima o resultado - Chame
getUserInfo("Bob Johnson", "bob@test.com")e imprima o resultado - Chame
getUserInfo(null, null)e imprima o resultado - Chame
getUserInfo("Sarah Wilson", null)e imprima o resultado
Experimente você mesmo
// TODO: Escreva seu código aqui
// Crie a função getUserDisplayName que recebe fullName (string | null) e retorna string
// Crie a função formatUserEmail que recebe email (string | null) e retorna string
// Crie a função getUserInfo que recebe name e email (ambos string | null) e retorna string
// Teste as funções e imprima os resultados
console.log(getUserDisplayName("John Smith"));
console.log(getUserDisplayName(null));
console.log(formatUserEmail("ALICE@EXAMPLE.COM"));
console.log(formatUserEmail(null));
console.log(getUserInfo("Bob Johnson", "bob@test.com"));
console.log(getUserInfo(null, null));
console.log(getUserInfo("Sarah Wilson", null));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 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