Created
December 13, 2017 11:35
-
-
Save geovanisouza92/b5ad90dc475d7321dd774f6ed104b829 to your computer and use it in GitHub Desktop.
Análise de fluxo para evitar de "esquecer" de tratar código
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Aqui você define uma enumeração de valores: ela não é constante, vc define | |
// valores estruturais (não tipos) que são aceitos | |
type WillyWonkaElevatorDirection = "horizontal" | |
| "vertical" | |
// | "diagonal" // Descomente isso | |
; | |
// Aqui você pode usar esse novo tipo | |
function handleDirection(direction: WillyWonkaElevatorDirection) { | |
switch (direction) { | |
case "horizontal": return; | |
case "vertical": return; | |
// Caso um dos valores de direction não seja tratado, a análise | |
// de fluxo vai perceber que "assertNever" está sendo chamado | |
// com um valor do tipo ("diagonal" | never), e como a função | |
// "assertNever" só aceita "never", o TS vai avisar que você | |
// está "usando errado" a função | |
default: return assertNever(direction); | |
} | |
} | |
// Também funciona se você precisa aplicar o tipo em outras estrutura. | |
// Aqui o tipo é: um objeto onde a chave "k" é um valor de "WillyWonkaElevatorDirection" | |
// e o valor é uma string | |
const Handlers: {[k in WillyWonkaElevatorDirection]: string} = { | |
horizontal: "para o lado", | |
vertical: "para cima", | |
}; | |
// Aqui você define uma função que estoura um erro caso seja chamada. | |
// O parâmetro genérico <T> é apenas para permitir que essa função seja | |
// usada em um return e o TypeScript "capture" o tipo de retorno | |
// automaticamente | |
function assertNever<T>(value: never): T { | |
throw new Error("assertNever called with value: " + value); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment