Code Flow
Como o fluxo de código dentro de nossos arquivos JavaScript podem afetar
a tipagem ao longo de nosso programa.
//No caso acima, o método 'find' pode falhar. Neste caso,
não temos um objeto. Isto cria a tipagem:
{ name: string } | undefined
Se você passar o mouse por cima dos três casos de uso de 'jon' abaixo,
você verá que a tipagem muda dependendo de onde a palavra está alocada:
const users = [{ name: "Ahmed" }, { name: "Gemma" }, { name: "Jon" }];
//Iremos verificar se encontramos um usuário com nome "jon".
const jon = users.find((u) => u.name === "jon");
//O tipo '{ name: string } | undefined' usa uma ferramenta do TypeScript
chamado de union types (união de tipagens). Uma union type é uma forma
de declarar que um objeto pode ser uma de muitas coisas.
O pipe (barra vertical) atua como um separador entre duas diferentes tipagens.
A natureza dinâmica do JavaScript permite que muitas funções
recebam e retornem objetos de tipagens não-relacionadas e nós
precisamos ser capazes de expressar com quais podemos estar lidando.
Nós podemos usar isso em várias formas. Vamos começar observando
um array cujos valores são de tipagens diferentes.
if (jon) {
jon;
} else {
jon;
}
//Nós podemos usar a sintaxe JavaScript 'typeof x === y' para a verificação
da tipagem do primeiro elemento. Você pode passar o mouse sobre a palavra
'randomIdentifier' abaixo e ver como ela muda conforme suas
diferentes localizações.
const identifiers = ["Hello", "World", 24, 19];
//Essa análise do controle de fluxo significa que nós podemos escrever
Javascript puro e o TypeScript tentará entender como a tipagem do código
mudará em diferentes localizações.
Para entender mais sobre a análise do fluxo de código:
- example:type-guards
Para continuar lendo os exemplos você poderá pular para os seguintes
tópicos agora:
- Modern JavaScript: example:immutability
- Type Guards: example:type-guards
- Functional Programming with JavaScript example:function-chaining
const randomIdentifier = identifiers[0];
if (typeof randomIdentifier === "number") {
randomIdentifier;
} else {
randomIdentifier;
}