O Tipo 'never'
Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 70 de 73.
O tipo never representa valores que nunca ocorrem. Isso pode parecer confuso no início, mas na verdade é bastante lógico quando você pensa em certos cenários em seu código.
O tipo never é mais comumente usado para funções que nunca retornam normalmente.
Isso inclui funções que sempre lançam um erro ou contêm loops infinitos:
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
// Este loop nunca termina
}
}Ao contrário de void, que indica que uma função não retorna um valor significativo, never indica que a função nunca chega ao seu ponto final. A execução ou para devido a um erro sendo lançado ou continua indefinidamente.
Desafio
FácilCrie uma função chamada throwError que demonstre o tipo de retorno never sempre lançando um erro e nunca retornando normalmente.
A função deve:
- Receber um parâmetro
messagedo tipostring - Lançar um novo
Errorcom a mensagem fornecida - Ter um tipo de retorno explícito de
never
Crie uma segunda função chamada handleOperation que:
- Receba dois parâmetros:
operationdo tipostringevaluedo tiponumber - Retorne
value * 2se a operação for"double" - Retorne
value / 2se a operação for"half" - Chame
throwErrorcom a mensagem"Invalid operation: [operation]"para qualquer outra operação - Tenha um tipo de retorno explícito de
number
Teste suas funções com as seguintes operações:
- Chame
handleOperation("double", 5)e imprima o resultado - Chame
handleOperation("half", 8)e imprima o resultado - Chame
handleOperation("triple", 3)e imprima o resultado (isso lançará um erro)
Crie casos de teste adicionais:
- Chame
handleOperation("double", 15)e imprima o resultado - Chame
handleOperation("half", 20)e imprima o resultado
Experimente você mesmo
// TODO: Escreva seu código aqui
// Crie a função throwError com o tipo de retorno never
// Crie a função handleOperation com o tipo de retorno number
// Teste as funções com blocos try-catch
try {
console.log(handleOperation("double", 5));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("half", 8));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("triple", 3));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("double", 15));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("half", 20));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}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 TuplasPratique por conta própria: Compilador de JavaScript online