Buscar

Programação cliente com TypeScript

Prévia do material em texto

Programação cliente com TypeScript
Prof. Sérgio Assunção Monteiro
Apresentação
Neste conteúdo, você vai aprender os conceitos e princípios de
desenvolvimento da linguagem de programação TypeScript.
A linguagem de programação TypeScript é uma extensão da linguagem
JavaScript. Ambas têm o mesmo objetivo: desenvolver aplicações para
web. Como era de se esperar, o TypeScript oferece recursos mais
avançados do que o JavaScript.
Vamos desenvolver alguns exemplos práticos que vão lhe ajudar a
dominar os diversos aspectos da linguagem.
Propósito
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
1 of 91 28/04/2024, 16:59
Propósito
Preparação
Tudo o que você precisa para rodar os exemplos é de um computador
com acesso à internet e de um navegador instalado, como o Google
Chrome, por exemplo. Vamos rodar os exemplos no seguinte endereço
eletrônico: https://www.typescriptlang.org/play/index.html
Objetivos
Módulo 1
Conceitos gerais e similaridades com o
JavaScript
Reconhecer os conceitos gerais e as similaridades com o JavaScript.
Módulo 2
Funções com TypeScript
Descrever funções com TypeScript.
Módulo 3
Tipos e narrowing
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
2 of 91 28/04/2024, 16:59
Tipos e narrowing
Analisar os tipos e narrowing.
Módulo 4
Classes com TypeScript
Aplicar exemplos práticos de classes com TypeScript.
Introdução
Você consegue imaginar o funcionamento da nossa sociedade
sem o uso das aplicações para internet?
A principal linguagem de programação que se popularizou para o
desenvolvimento de aplicações para web foi o JavaScript. E sua
evolução foi a linguagem TypeScript, que possui os mesmos
recursos, mas é superior em relação ao suporte para uso de tipos
e programação orientada a objetos.
Neste vídeo, apresentaremos os elementos essenciais da
linguagem de programação TypeScript, bastante utilizada no
desenvolvimento de aplicações web tanto do lado do servidor,

Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
3 of 91 28/04/2024, 16:59
desenvolvimento de aplicações web tanto do lado do servidor,
como do lado cliente.
1 - Conceitos gerais e similaridades com o JavaScript
Ao �nal deste módulo, você será capaz de reconhecer os conceitos gerais e
similaridades com o JavaScript.
Fundamentos do TypeScript
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
4 of 91 28/04/2024, 16:59
Agora, vamos conhecer os principais aspectos da linguagem de
programação TypeScript, o que nos permitirá criar bases sólidas para
desenvolver aplicações mais completas.
Neste vídeo, apresentaremos os principais conceitos sobre os
fundamentos da linguagem de programação TypeScript e entender por
que ela é tão importante para o desenvolvimento de aplicações web.
O que é a linguagem de programação TypeScript?
TypeScript (TS) é uma linguagem de programação baseada na
linguagem de programação JavaScript (JS). A sua principal
característica é a possibilidade de utilizar tipos estáticos, classes e
interfaces. Confira alguns aspectos fundamentais da linguagem:

Fortemente tipada

Orientada a objetos

Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
5 of 91 28/04/2024, 16:59

Compilada
O TS foi desenvolvido pela Microsoft como resultado do trabalho de
Anders Hejlsberg – que projetou a linguagem de programação C#. Uma
das definições muito comuns sobre o TS é que ele é um superconjunto
tipado e compilado de JS, e, na prática, é o JavaScript com recursos
adicionais.
Recomendação
Em especial para os desenvolvedores de aplicações web, utilizar o TS
traz vantagens no sentido de construir aplicações mais tolerantes a
falhas. Além disso, é um software de código aberto.
Atividade 1
Não há dúvidas de que a linguagem JavaScript (JS) é uma das mais
importantes ferramentas para desenvolvermos aplicações web. Ainda
hoje, ela continua sendo muito utilizada na prática. No entanto, houve
uma extensão do JS para a linguagem TypeScript (TS). Obviamente,
existem muitas semelhanças entre ambas, mas, como era de se esperar,
o TS acrescentou elementos novos como tipos e orientação a objetos
que são consideradas grandes vantagens. Nesse sentido, qual é um dos
principais motivos do JS ainda ser bastante utilizado?
A
O JS já possui muitos sistemas legados, além de que a
curva de aprendizado para desenvolver aplicações com
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
6 of 91 28/04/2024, 16:59
Parabéns! A alternativa A está correta.
O TypeScript (TS) é uma extensão do JavaScript (JS). Na prática, tudo o
que podemos fazer no JS também podemos fazer no TS, mas o
contrário já não é verdadeiro. O JS é muito usado, pois existem
inúmeros sistemas desenvolvidos nele e, apesar de utilizar conceitos
mais simples, isso pode ser uma desvantagem, pois pode ocasionar
diversas vulnerabilidades, além de perdermos as vantagens dos
recursos da programação orientada a objetos suportada pelo TS.
curva de aprendizado para desenvolver aplicações com
ele é muito rápida.
B
O TS ainda é uma linguagem muito recente e suas
vantagens não justificam a mudança da forma de
programar.
C
O TS permite desenvolver programação orientada a
objetos e, isso, é bastante complexo na prática.
D
Para desenvolver uma aplicação no TS, são necessários
passos muito complexos e muito diferentes do JS.
E
O TS ainda não é considerada uma linguagem de
programação confiável e, na prática, ela é muito mais
limitada do que o JS para desenvolver aplicações web
robustas.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
7 of 91 28/04/2024, 16:59
JavaScript versus TypeScript:
semelhanças e diferenças
Vamos conhecer os principais aspectos da linguagem de programação
TypeScript, por meio de exemplos simples, para assimilarmos como ela
funciona.
Neste vídeo, apresentaremos algumas das principais semelhanças e
diferenças entre as linguagens de programação JavaScript e TypeScript.
Na prática, vai ser natural que você use ambas para desenvolver as suas
aplicações extraindo, assim, o que cada uma oferece de melhor.
JavaScript e TypeScript: pontos em comum
A origem do TypeScript está nas limitações do JavaScript, pois o
JavaScript foi desenvolvido como uma linguagem de programação do
lado do cliente que passou a ser usado como uma linguagem de
programação do lado do servidor.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
8 of 91 28/04/2024, 16:59
Logotipo TypeScript.
No entanto, ficou evidente que, à medida que o código crescia, ele se
tornava mais complexo e difícil de gerenciar, o que impediu que o
JavaScript tivesse sucesso como uma tecnologia do lado do servidor.
Por isso, então, houve a necessidade de criar o TypeScript. Ambas as
linguagens, naturalmente, têm muitas semelhanças, das quais podemos
destacar (FREEMAN, 2019):
 O código de um projeto do TypeScript é convertido
em código JavaScript simples, pois os browsers
não podem interpretá-lo de forma nativa. Isso
significa que o código escrito em TypeScript é
compilado e convertido para JavaScript.
 Qualquer código escrito em JavaScript pode ser
convertido em TypeScript alterando a extensão de
.js (JavaScript) para .ts (TypeScritp), significando
que JavaScript é TypeScript, visto que TS é um
superconjunto de JS.
 Como consequência dos dois primeiros itens, o
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
9 of 91 28/04/2024, 16:59
O TypeScript pode ser utilizado pelos desenvolvedores para usar código
JavaScript já existente e incorporar bibliotecas.Diferenças entre JavaScript e TypeScript
Apesar das semelhanças entre as duas linguagens de programação,
existem algumas diferenças marcantes. Entre essas diferenças estão:
TypeScript
• É uma linguagem
de programação
orientada a objetos.
• Possui o recurso de
tipos estáticos.
• Suporta interfaces
(recurso de
programação
orientada a
objetos).
JavaScript
• É uma linguagem
de script.
• Não possui o
recurso de tipos
estáticos.
• Não suporta
interfaces (recurso
de programação
orientada a
objetos).
TypeScript pode ser compilado para ser executado
em qualquer navegador, dispositivo ou sistema
operacional, ou seja, ele não é específico para
nenhum ambiente.

Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
10 of 91 28/04/2024, 16:59
Atividade 2
Uma característica muito importante de qualquer solução de
desenvolvimento é a capacidade de padronizar a construção de uma
solução. Normalmente, quem desempenha esse papel é o arquiteto de
softwares. Nesse sentido, assinale a alternativa correta de como o
TypeScript (TS) se diferencia do JavaScript (JS) para padronizar uma
solução de desenvolvimento:
A
O TS obriga que o desenvolvimento de qualquer solução
seja feita com programação orientada a objetos.
B
O TS é uma linguagem muito diferente da JS no sentido
de implementar funções que devem ter uma
nomenclatura padronizada, caso contrário, o programa
não funciona.
C
Para criarmos variáveis no TS, precisamos definir os
tipos delas, senão os programas não funcionam.
D
Diferente do JS, o TS obriga que utilizemos um
gerenciador de códigos que verifica se todos os
programas seguem o mesmo padrão de
desenvolvimento.
O TS oferece suporte para um tipo chamado de interface
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
11 of 91 28/04/2024, 16:59
Parabéns! A alternativa E está correta.
O TS oferece suporte para a programação orientada a objetos que, por si
só, já é uma grande diferença e vantagem em relação ao JS. Além disso,
o TS oferece o tipo interface que estabelece um padrão de
desenvolvimento. Assim, todas as classes que vão implementar a
interface são obrigadas a implementar os métodos conforme
estabelecido pela interface.
Codi�cando uma aplicação com
TypeScript
Agora, vamos conhecer um dos ambientes de programação em que
você vai testar rapidamente seus códigos da linguagem de programação
TypeScript e compartilhar com outras pessoas. Para isso,
apresentaremos como codificar uma aplicação.
Neste vídeo, apresentaremos um ambiente de programação que vai
facilitar o teste dos seus programas em JavaScript rapidamente. Além
disso, demonstraremos o código que registra no log da aplicação a
string “Hello World”.
E
O TS oferece suporte para um tipo chamado de interface
obrigando, assim, que as demais classes sigam um
determinado padrão de desenvolvimento.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
12 of 91 28/04/2024, 16:59
Como fazer testes rápidos de aplicações com
TypeScript
Existem algumas formas de testar uma aplicação desenvolvida com
TypeScript. Uma delas é fazer a instalação local via npm. O passo a
passo para esse tipo de instalação pode ser encontrado em:
www.typescriptlang.org/download.
Nesse trabalho, vamos executar nosso script on-line com o compilador
oficial. Para isso, acesse o link: www.typescriptlang.org/play/index.html.
Ao acessarmos esse endereço, veremos uma tela semelhante à
seguinte:
Ambiente de desenvolvimento on-line do TypeScript.
Nesse ambiente, desenvolveremos todos os nossos exemplos. A seguir,
apresentamos o código de “boas-vindas” no TypeScript:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
13 of 91 28/04/2024, 16:59
Agora, vamos selecionar esse código e copiá-lo para o ambiente on-line
de desenvolvimento do TypeScript e, em seguida, devemos pressionar o
botão “Run”. Confira!
Primeiro programa em TypeScript.
Passo 1
Escrever o código em TypeScript.
Primeiro programa em TypeScript.
Passo 2
Pressionar o botão “Run” para executar o código.
Primeiro programa em TypeScript.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
14 of 91 28/04/2024, 16:59
Primeiro programa em TypeScript.
Passo 3
É apresentada a saída da execução.
Esse ambiente é excelente para aprender a programar sem a
necessidade de fazer instalações e configurações locais. Além disso,
temos a opção de compartilhar o projeto com outras pessoas. Para isso,
basta pressionar o botão “Share”, copiar o endereço que ele fornece e
enviar para outras pessoas. Na imagem a seguir, mostramos o
processo.
Como compartilhar código on-line do TypeScript.
Os nossos próximos passos serão desenvolver vários exemplos que
comparam as linguagens de programação JavaScript e TypeScript.
Manipulação de variáveis string
Vamos iniciar o nosso processo de aprendizado com a utilização de
variáveis do tipo string, que são cadeias de caracteres. Primeiro, vamos
ao código em JavaScript:
Javascript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
15 of 91 28/04/2024, 16:59
Esse código produz como saída o seguinte resultado:
Console 
Agora, vamos implementar uma versão semelhante para TypeScript:
Typescript 
Cuja saída é:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
16 of 91 28/04/2024, 16:59
As saídas dos dois códigos são semelhantes. Qual foi, então, a principal
diferença entre ambos? A diferença principal está na declaração da
variável usada para armazenar a mensagem com os resultados. No
caso do TypeScript, tivemos que indicar que ela é do tipo string.
Atividade 3
Você já sabe executar uma aplicação no TypeScript. Considere o
seguinte código em TS:
let vTS1: string = "F";
let vTS2: string = " G ";
let vTS3: string = "A";
console.log(vTS1+vTS2+vTS3);
Agora, execute o código. A saída será:
[LOG]: "F G A"
Nesse sentido, assinale a alternativa correta que modifique o código de
tal forma que a saída seja:
[LOG]: "A F G"
A
let vTS1: string = "A";
let vTS2: string = " F ";
let vTS3: string = "G";
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
17 of 91 28/04/2024, 16:59
Parabéns! A alternativa E está correta.
A let vTS3: string = "G";
console.log("Resultados com JavaScript");
console.log(vTS2+vTS3+vTS1);
B
let vTS1: string = "A";
let vTS2: string = "F";
let vTS3: string = "G";
console.log("Resultados com JavaScript");
console.log(vTS1+vTS2+vTS3);
C
let vTS1: string = "A";
let vTS2: string = " F ";
let vTS3: string = "G";
console.log("Resultados com JavaScript");
console.log(vTS1+vTS2+vTS3);
D
let vTS1: string = "A";
let vTS2: string = "F";
let vTS3: string = "G";
console.log(vTS1+vTS2+vTS3);
E
let vTS1: string = "A";
let vTS2: string = " F ";
let vTS3: string = "G"
;console.log(vTS1+vTS2+vTS3);
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
18 of 91 28/04/2024, 16:59
Esse exercício é muito importante, pois ele o ajuda a desenvolver o
raciocínio lógico e observar a saída. De fato, a saída solicitada pedia
apenas o resultado: [LOG]: "A F G". Portanto, quaisquer outras saídas
com mensagens distintas dessas estão erradas.
Utilização de comandos
condicionais e iterativos
Conheça agora a sintaxe e como utilizar os comandos condicionais e
iterativos. Esses comandos são utilizados para estabelecer o
comportamento de um programa a partir da entrada de dados.
Neste vídeo, apresentaremos como trabalhar com os comandos
condicionais e iterativos no TS. Eles funcionam como o controle de fluxo
da execuçãode um programa, a partir da entrada de dados.
Trabalhando com comandos condicionais
Agora que já aprendemos como declarar variáveis com tipos e utilizar os
operadores lógicos e relacionais no TypeScript, vamos ver como utilizar
os comandos condicionais if-else. A ideia é bem simples: basicamente,
testamos se uma condição é verdadeira. Se ela realmente for verdadeira,
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
19 of 91 28/04/2024, 16:59
testamos se uma condição é verdadeira. Se ela realmente for verdadeira,
então, o programa passa executar o bloco de comandos associados ao
comando if, senão ele vai para o comando else, caso esse seja utilizado
no programa (ABREU, 2017).
Confira um exemplo de como utilizar esses comandos condicionais:
Typescript 
A saída resultante da execução do código é:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
20 of 91 28/04/2024, 16:59
No TypeScript, podemos, ainda, utilizar o operador ternário, que tem a
seguinte sintaxe: x = teste? valor1 : valor2;
Ou seja, se o teste for verdadeiro, então, a variável x recebe o valor1,
caso contrário, a variável x recebe valor2.
Veja um exemplo de código que utiliza o operador ternário no
TypeScript:
Typescript 
Após a execução do código, obtemos a seguinte saída:
Console 
Trabalhando com comandos iterativos
Quando trabalhamos com vetores, ou listas, é normal que tenhamos que
manipulá-los. Para isso, utilizamos os comandos iterativos. O TypeScript
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
21 of 91 28/04/2024, 16:59
possui dois comandos iterativos: for e while. O comando for, em
especial, pode ser usado de diferentes modos. No modo tradicional, ele
possui a seguinte sintaxe: for(início; condição; incremento ou
decremento)
Mas há outra versão baseada na teoria dos conjuntos com a seguinte
sintaxe: for(elemento of conjunto)
Nesse exemplo, podemos ver as duas versões do comando “for”:
Typescript 
A execução do programa produz o seguinte saída:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
22 of 91 28/04/2024, 16:59
Agora, vamos analisar o comando while. Ele também tem duas versões:
uma em que o teste é realizado antes de entrar no bloco de comandos
associados a ele e outra em que o teste só é realizado após a execução
do bloco de comandos.
Observe um exemplo com as duas versões do comando while:
Typescript 
A saída da execução desse código é dada por:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
23 of 91 28/04/2024, 16:59
Aqui, fechamos os conhecimentos básicos do TypeScript. Teste todos
esses códigos e faça pequenas modificações para analisar o
comportamento deles. Mais adiante, vamos aprender alguns assuntos
mais avançados do TypeScript.
Atividade 4
Os comandos iterativos, tais como o “for”, fazem parte da sintaxe do
TypeScript. Por exemplo, vamos considerar o trecho de código a seguir:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
24 of 91 28/04/2024, 16:59
Agora, execute o código e, em seguida, selecione a opção correta com o
valor da variável “x”:
Parabéns! A alternativa B está correta.
O trecho de código está correto. O que ocorre é que ele soma apenas os
números divisíveis por 2, ou seja, que são pares. Como o vetor “v” possui
apenas números ímpares, o resultado da soma é “0”.
A 1
B 0
C 4
D 10
E 20
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
25 of 91 28/04/2024, 16:59
Escrevendo o código de
ordenação de um vetor em
TypeScript
Nesta atividade prática, escreveremos o código em TypeScript que
ordena um vetor em ordem crescente. Para demostrar a execução da
atividade, apresentaremos o código que ordena um vetor em ordem
decrescente.
Neste vídeo, veremos o código de uma aplicação TS que ordena um
vetor em ordem decrescente.
Roteiro de prática
Nesta atividade prática, você deverá codificar uma aplicação TypeScript
que ordena um vetor em ordem crescente, usando o método da bolha.
Confira a seguir, o passo a passo!
Passo 1: Abrir o sítio “typescriptlang.org/play”.
Passo 2: Declarar um vetor de 10 posições, inicializando seu conteúdo
com números inteiros aleatórios fora de ordem.
Passo 3: Escrever o método da bolha em TypeScript. O algoritmo básico
está codificado a seguir em pseudocódigo:
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
26 of 91 28/04/2024, 16:59
Typescript 
Passo 4: imprimir resultado
Faça você mesmo!
Em nossa atividade, declaramos um vetor pelo comando a seguir:
let vetorw :number[] = [ 7, 5, 40, 20, 70, 50, 2, 1, 1];
Essa forma de declaração remete a uma característica importante da
linguagem TypeScript. Entre as características apresentadas, destaque
o principal conceito presente nesta declaração de variável:
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
27 of 91 28/04/2024, 16:59
Parabéns! A alternativa E está correta.
Ao declararmos o vetor “vetorw”, informamos ao ambiente de
programação que os elementos do vetor serão números. Isso faz da
linguagem TypeScript, uma linguagem tipada.
A TypeScript é orientada ao objeto.
B TypeScript é uma linguagem interpretada.
C TypeScript é uma linguagem do paradigma funcional.
D TypeScript é uma linguagem do paradigma lógico.
E TypeScript é uma linguagem tipada.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
28 of 91 28/04/2024, 16:59
2 - Funções com TypeScript
Ao �nal deste módulo, você será capaz de descrever funções com TypeScript.
Introdução às funções no TS
O TypeScript permite que possamos trabalhar com funções. Esse
recurso é essencial para desenvolvermos programas organizados,
seguros, eficientes e fáceis de fazer manutenção.
Neste vídeo, apresentaremos como implementar funções no TypeScript.
Esse é um recurso fundamental para se tornar um desenvolvedor
profissional.
A importância das funções
As funções constituem unidades lógicas básicas de um código. Por
meio delas garantimos que um programa seja sustentável e reutilizável.
Quando as utilizamos corretamente, podemos construir bibliotecas que
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
29 of 91 28/04/2024, 16:59
poderão ser utilizadas por vários programas. Uma consequência
positiva imediata disso é a divisão de trabalhos de uma equipe, pois
pessoas com diferentes habilidades podem trabalhar em partes
específicas do desenvolvimento.
Os usuários das funções precisam conhecer as seguintes informações!

Quais são os argumentos de uma função.

Qual a saída que a função retorna, se é que ela deve retornar algum
valor.
O usuário que vai consumir a função a enxerga como uma caixa-preta,
por isso a responsabilidade de garantir que funcione corretamente e
com o melhor desempenho possível é do desenvolvedor.
Sintaxe básica
O TypeScript oferece suporte para funções. A sintaxe básica de uma
função com o TypeScript é (TYPESCRIPT HANDBOOK, 2022). Veja!
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
30 of 91 28/04/2024, 16:59
Apesar de essa ser a sintaxe mais comum, existem outras formas de
programar uma função como veremos adiante. A seguir, vamos
conhecer as funções que não possuem retorno.
Funções sem retorno
Há situações em que não estamos interessados que a função tenha
retorno. Nesse tipo de situação, a função utiliza o tipo “void” para
informar quenão terá retorno.
Confira um código com exemplo de função que não possui retorno:
Typescript 
A função “imprimir_ts” recebe dois parâmetros, sendo um deles do tipo
string e o outro do tipo number. Ela simplesmente imprime os
conteúdos dos parâmetros “msg” e “num”, como podemos ver a seguir:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
31 of 91 28/04/2024, 16:59
Agora, vamos estudar a forma mais comum de utilizar uma função, que
é a aplicação de retorno.
Funções com retorno
Uma função omite do usuário a complexidade da lógica de
programação. Assim, o usuário deve se preocupar apenas com a
passagem de parâmetros para a função e utilizar o retorno que ela
produz.
Nesse caso, precisamos informar qual o tipo de retorno da função e
utilizar, explicitamente, o comando “return”.
Veja um exemplo de função com retorno:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
32 of 91 28/04/2024, 16:59
No caso, a função recebe dois parâmetros do tipo number, faz a adição
deles e, em seguida, retorna o resultado da adição para quem fez a
chamada da função.
Observe a saída do código do exemplo:
Console 
Funções com parâmetros do tipo string
Vamos ver mais um exemplo de função com retorno. Nesse caso, a
função recebe dois parâmetros do tipo string e retorna a concatenação
deles, como podemos ver no código a seguir:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
33 of 91 28/04/2024, 16:59
Observe o resultado da execução do programa:
Console 
Atividade 1
O TypeScript dá suporte ao uso de funções. Os parâmetros dessas
funções possuem tipos e a própria função também utiliza tipos para
definir o retorno dela. Selecione a opção correta que justifica como uma
vantagem a forma como o TypeScript trabalha com funções:
A
O uso de funções elimina a possibilidade de erros em
tempo de execução.
Ao utilizar tipos para os parâmetros das funções, o
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
34 of 91 28/04/2024, 16:59
Parabéns! A alternativa E está correta.
A utilização de tipos nos parâmetros de uma função que o TypeScript
suporta é uma vantagem no sentido de auxiliar o controle das
operações que podem ser realizadas com determinada variável.
Funções para manipulação de
vetores e recursivas
Existem muitos usos comuns para funções. Um deles é a manipulação
de vetores; outro é para trabalhar com recursividade, ou seja, quando a
B
Ao utilizar tipos para os parâmetros das funções, o
TypeScript acelera o desempenho de execução de um
programa.
C
A principal vantagem de utilizar tipos nos parâmetros
das funções é a reutilização de código.
D
Com a utilização de tipos nos parâmetros das funções, o
TypeScript possibilita trabalhar com vetores.
E
Usar tipos nos parâmetros auxilia a aplicação correta
das operações que podem ser feitas com eles.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
35 of 91 28/04/2024, 16:59
de vetores; outro é para trabalhar com recursividade, ou seja, quando a
função faz chamadas a si mesma.
Neste vídeo, apresentaremos como desenvolver funções para manipular
vetores e como fazer chamadas recursivas.
Funções para manipular vetores
Como vimos, vetores são estruturas de dados que permitem
manipularmos diversos elementos através de uma mesma variável com
o uso de índices. Portanto, é natural trabalharmos com vetores nas
funções. Passar um vetor como parâmetro para uma função é
semelhante ao que fizemos com os outros tipos de elementos, ou seja,
precisamos colocar o tipo de dado e utilizar os colchetes.
Veja um exemplo de como passar um vetor como parâmetro de uma
função:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
36 of 91 28/04/2024, 16:59
A função “somatorio” faz a soma de todos os elementos do vetor
numérico. Para acessar cada elemento do vetor dentro da função,
utilizamos o comando iterativo “for”. O resultado da execução do
exemplo é dado por:
Console 
Funções recursivas
Há situações em que podemos descrever um problema em termos dele
mesmo. O exemplo clássico para esse tipo de situação ocorre com o
cálculo do fatorial de um número n que é dado por:
Observe a implementação para calcular o fatorial de um número n com
uma função no TypeScript:
fatorial(n) = 0,  caso n = 0,  ou n = 1
fatorial(n) = n ∗ fatorial(n − 1)
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
37 of 91 28/04/2024, 16:59
Typescript 
A saída da execução desse código é dada por:
Console 
Importante: Utilizar recursividade é muito útil em algumas situações,
mas sempre devemos ficar atentos ao caso base, pois ele garante que a
função vai parar de fazer chamadas a si mesma.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
38 of 91 28/04/2024, 16:59
Atividade 2
Uma das possibilidades de desenvolver funções no TS é através da
recursividade. Há situações em que esse tipo de programação é muito
útil, mas existem alguns elementos básicos que o desenvolvedor não
pode deixar de fazer, caso contrário, terá problemas. Assim, assinale a
alternativa correta a respeito dos aspectos básicos de uma função
recursiva:
A
Toda função recursiva deve ter um caso base em que ela
termina, além da chamada a si mesma dentro da própria
função.
B
O programador é obrigado a declarar os tipos de todas
as variáveis que ele for usar na função recursiva.
C
O uso de funções recursivas deve ser evitado no TS, pois
afeta drasticamente o desempenho do sistema.
D
É essencial que o desenvolvedor documente a função
recursiva no TS, caso contrário, o sistema não vai
permitir que ela funcione.
O programador não pode esquecer de estabelecer uma
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
39 of 91 28/04/2024, 16:59
Parabéns! A alternativa A está correta.
A recursividade é um recurso de programação muito útil. Nas aplicações
web, a recursividade pode nos ajudar a verificar padrões com poucas
linhas de código e de uma forma natural que, de outro modo, seria
bastante complexo. No entanto, o programador não pode se esquecer
de implementar o caso base, pois ele garante o término do programa,
nem a chamada para a própria função que é o que caracteriza a
chamada recursiva.
Arrow functions
As chamadas arrow functions são uma implementação prática do
paradigma de programação funcional. Elas são muito utilizadas na
prática por programadores avançados, pois facilitam a manipulação de
listas e torna o código mais eficiente.
A linguagem de programação TypeScript pode utilizá-las e, com o
tempo, você vai optar por trabalhar com elas tanto pelo desempenho
que oferecem, como pela elegância do código. Além disso, também
vamos explorar algumas das funcionalidades do pacote RegEx.
Neste vídeo, apresentaremos algumas formas avançadas de utilizar
funções no TypeScript. Em especial, vamos dar destaque para as arrow
functions e a biblioteca RegEx.
E
O programador não pode esquecer de estabelecer uma
quantidade máxima de chamadas para a função
recursiva, afim de evitar loops infinitos.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
40 of 91 28/04/2024, 16:59
O que é uma arrow function
Nos códigos mais avançados do TypeScript, é muito comum utilizarmos
funções lambda, que são estruturas lógicas de programação funcional.
A sintaxe desse tipo de função utiliza uma seta, que é a sintaxe
abreviada para definir a função anônima.
Essa espécie de função é conhecida como função seta, ou,de forma
mais comum, como arrow function. Entre as implicações práticas de
utilizá-las estão a eliminação da necessidade de escrever a palavra-
chave “function” e fazer a associação da função a uma variável.
Veja dois exemplos de como utilizar uma arrow function:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
41 of 91 28/04/2024, 16:59
Na função “soma_anom_ts_1”, utilizamos a delimitação de blocos com
os símbolos de abre parênteses e fecha parênteses, além de utilizarmos
a plavra-chave return.
Na função “soma_anom_ts_2”, não fizemos uso dos delimitadores de
bloco e nem da palavra-chave return e, ainda assim, obtivemos os
mesmos resultados, como podemos ver a seguir:
Console 
Funções com expressões regulares
A utilização de expressões regulares é um conhecimento essencial
quando trabalhamos com desenvolvimento de aplicações web, como
para buscar por padrões em textos. Por meio dessas funções, podemos
procurar por substrings dentro de outras.
Observe um exemplo de uso de expressões regulares no TypeScript:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
42 of 91 28/04/2024, 16:59
Para utilizar uma expressão regular, precisamos indicar que o tipo de
dado da variável é “RegExp”. No caso do exemplo, o padrão que
estamos procurando é a palavra “te” dentro do texto de teste. A seguir,
apresentamos o resultado da execução do programa:
Console 
Atividade 3
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
43 of 91 28/04/2024, 16:59
O TypeScript dá suporte ao uso de função anônimas, também
conhecidas como arrow functions. Por exemplo, vamos considerar o
trecho de código em que x deve ser, obrigatoriamente, maior do que 1:
let r = (x: number):number => x==1? 1:x+r(x-1);
console.log(r(8));
Selecione a opção correta que possui um código com uma lógica
equivalente:
A
function r2(n: number): number {
    return 36;
}
B
function r1(n: number): number {
    return (1+n)*n/2;
}
C let r3 = (x: number):number => 36;
D
function r4(n: number): number {
    if(n%2==0){
        return 36;
    }
    return 0;
}
E let r5 = (x: number):number => x%2==1? 0:36;
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
44 of 91 28/04/2024, 16:59
Parabéns! A alternativa B está correta.
Apesar de todos os códigos retornarem o mesmo valor passando como
parâmetro o valor “8”, o único que é equivalente ao código do exercício é
o da função “r1”. Para verificar isso, basta testar a chamada para outros
valores, com “5”, “9” e “20”, por exemplo. Para esses exemplos, apenas a
função “r1” produzirá os mesmos valores da função “r”.
Expressões regulares mais
interessantes
O pacote RegEx oferece diversas funcionalidades, facilitando o
desenvolvimento de uma aplicação que precisa manipular dados. Em
especial, isso é bastante útil, quando esses dados têm algum tipo de
padrão. Agora, vamos estudar um exemplo que nos mostra o potencial
do que podemos fazer com RegEx.
Neste vídeo, apresentaremos um exemplo bastante interessante de
como podemos usar as funcionalidades biblioteca RegEx para resolver
problemas reais.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
45 of 91 28/04/2024, 16:59
Roteiro de prática
Usando a função a seguir, o conceito de expressão regular e o roteiro
apresentado no vídeo, reconheça e imprima os códigos de rastreamento
dos Correios brasileiros válidos. Os códigos têm a seguinte regra de
formação: duas letras, seguido de nove dígitos e a sigla “BR”.
Typescript 
Confira a seguir, o passo a passo!
Passo 1: Copiar a função dada para o ambiente de desenvolvimento,
alterando-a de modo a imprimir um código de rastreamento válido.
Passo 2: Criar a expressão regular que reconhece o padrão de códigos
de rastreamento dos Correios.
Passo 3: Criar um vetor de strings com os candidatos a código de
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
46 of 91 28/04/2024, 16:59
rastreamento.
Passo 4: Chamar a função que irá imprimir os códigos válidos.
Faça você mesmo!
A biblioteca RegEx é utilizada em diversas linguagens de programação.
Ela é um poderoso recurso para manipular cadeias de palavras para
identificarmos padrões, e realizar outras funcionalidades. Nós também
podemos usar RegEx no TypeScript. Assinale a alternativa correta com a
expressão RegEx capaz de identificar o seguinte padrão: o código do
estado - separado entre parênteses e começando com zero – seguido
por nove dígitos numéricos, sendo que estão separados de 5 e 4 através
do símbolo “-”. Exemplo: (095)11111-1111
A (0dd)d{5}-d{4}
B (0dd)dd {5}-d{4}
C (0dd)d{4}-d{5}
D (0dd)d{5}-d{4}
E (0dd)d{5}-d{4}
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
47 of 91 28/04/2024, 16:59
Parabéns! A alternativa D está correta.
Essa questão é muito importante para você desenvolver as habilidades
de trabalhar com a biblioteca RegEx. É necessário realizar alguns testes
no ambiente de programação do TypeScript para chegar à conclusão
correta.
Funções com parâmetros REST
Em algumas situações, quando trabalhamos com aplicações web, é
comum não sabermos com antecedência a quantidade de parâmetros
que uma função do nosso sistema vai receber. Para isso, o TypeScript
oferece funções com parâmetros REST, que nos permite lidar com essas
situações.
Neste vídeo, apresentaremos um exemplo de como utilizar parâmetros
REST para lidar com situações nas quais a função não conhece de
anteriormente a quantidade de parâmetros que ela vai receber.
REST na prática
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
48 of 91 28/04/2024, 16:59
REST na prática
Esse tipo de função permite receber uma quantidade não definida de
parâmetros. Ela é muito útil para aplicações web. A sintaxe dela é
caracterizada pelo uso de três pontos logo depois de algum parâmetro.
Uso tradicional de uma função REST
Nesse caso, temos um exemplo de uma chamada tradicional com
exceção do uso dos “três pontos” na passagem de parâmetro da função,
conforme podemos ver no código:
Typescript 
Cuja saída é dada por:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
49 of 91 28/04/2024, 16:59
Exemplo com arrow function
Agora, vamos ver outra versão que resolve a mesma situação, com a
utilização de arrow function no código a seguir.
Typescript 
Cuja saída é dada por:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
50 of 91 28/04/2024, 16:59
Arrow functions e RegEx: uma combinação poderosa
As saídas das duas versões são semelhantes, como era de se esperar. O
ponto fundamental que precisamos notar é que utilizamos as mesmas
chamadas da função, mas quantidades diferentes de parâmetros. Isso
se aplica muito bem em situações nas quais queremos generalizar
tratamentos de dados sem a necessidade de implementar diversas
funções para cada situação.
Atenção!
Nesse caso, se essa utilização não for bem-organizada, será difícil dar
manutenção no código.
Agora que já conhecemos os aspectos fundamentais do TypeScript e
sabemos as diversas formas de criarmos e utilizarmos funções, vamos
aprofundar os aspectos mais avançados da linguagem, como o conceito
de narrowing, que oferece mais flexibilidade na programação.
Antes, porém, fica a sugestão: execute todos os códigos que viu até
agora. Faça pequenas alterações e estude os resultados. Também crie
situações para gerar erros, pois é uma boa forma de aprender mais
sobre a linguagem.
Atividade 4
Programaçãocliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
51 of 91 28/04/2024, 16:59
Aprendemos sobre as funções REST e arrow functions no TypeScript
(TS). Ambas podem ser usadas em diferentes momentos e, de fato,
tornar a programação mais vantajosa. Nesse sentido, assinale a
alternativa correta a respeito das vantagens de utilizar funções RegEx e
arrow functions no TS:
Parabéns! A alternativa E está correta.
A
Ambas as funções são modernas e, por isso, devem ser
usadas com frequência.
B
Tanto as funções da biblioteca RegEx, como as arrow
functions possuem mecanismos de segurança que
eliminam riscos com falta de segurança.
C
O TS obriga que os desenvolvedores utilizem as funções
da biblioteca RegEx e as arrrow functions.
D
A biblioteca RegEx, por si só, possui funções muito
lentas que são otimizadas com o uso das arrow
functions.
E
Elas são otimizadas para gerenciar os dados com mais
eficiência, além de oferecerem flexibilidade.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
52 of 91 28/04/2024, 16:59
As funções da biblioteca RegEx são extremamente úteis para manipular
listas de forma eficiente através de pouco código, mas que exige que
conheçamos bem a sintaxe dela. Já as arrow functions oferecem muita
flexibilidade de programação, além de terem melhor desempenho na
prática do que as funções tradicionais.
3 - Tipos e narrowing
Ao �nal deste módulo, você será capaz de analisar os tipos e narrowing.
Os tipos estáticos do TypeScript
e suas limitações
O TypeScript oferece um recurso chamado de narrowing, o qual permite
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
53 of 91 28/04/2024, 16:59
O TypeScript oferece um recurso chamado de narrowing, o qual permite
que a mesma função tenha um comportamento distinto no momento da
passagem de parâmetros. Isso pode ser vantajoso no ambiente de
desenvolvimento web.
Neste vídeo, apresentaremos o conceito de narrowing no TypeScript e
aprenderemos a identificar o tipo de dado com o qual está trabalhando.
De�nição de narrowing
Narrowing, traduzido para o português, significa estreitamento, e é um
recurso que o TypeScript oferece como um modo de seguir possíveis
caminhos de execução quando uma função recebe um parâmetro, ou
mesmo quando declaramos uma variável. A ideia é que uma variável
possa ter o seu tipo definido durante a execução do programa. Para
fazer isso, precisamos indicar quais são os possíveis tipos que ela pode
assumir (TYPESCRIPT HANDBOOK, 2022).
Atenção!
Há um ponto relevante para levarmos em consideração aqui. Como os
tipos das variáveis serão definidos durante a execução, então
precisamos verificar em que tipo a variável está operando, pois não
podemos utilizá-las da mesma maneira.
Para tratar essa situação o TypeScript utiliza um recurso chamado “Type
Guard” – é traduzido para o português como tipos protegidos. O objetivo
desse recurso é verificar qual o tipo em que a variável está operando
através do operador typeof.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
54 of 91 28/04/2024, 16:59
Vamos ver, agora, alguns exemplos de como utilizar o operador typeof
com os tipos de variáveis.
Parâmetro string
Neste exemplo, para testar se o parâmetro é do tipo string, precisamos
realizar o seguinte teste:
Typescript 
Parâmetro number
Utilizamos tipos numéricos com bastante frequência em aplicações
desenvolvidas com TypeScritp. A sintaxe é dada por:
Typescript 
Parâmetro bigint
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
55 of 91 28/04/2024, 16:59
O tipo bigint é utilizado em situações nas quais precisamos manipular
números inteiros muito grandes, como identificadores de banco de
dados, e situações em que precisamos manipular data e hora. A sintaxe
para testar se um parâmetro é do tipo bigint é dada por:
Typescript 
Parâmetro boolean
Utilizar variáveis lógicas é muito comum, pois, constantemente,
deparamo-nos com situações que exigem testes. A sintaxe para testar
se uma variável é do tipo lógico é dada por:
Typescript 
Parâmetro symbol
Symbol é um tipo primitivo do TypeScript, útil para criarmos símbolos
que serão utilizados para controlar os possíveis valores de uma variável.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
56 of 91 28/04/2024, 16:59
que serão utilizados para controlar os possíveis valores de uma variável.
A sintaxe para testar se uma variável é do tipo symbol é dada por:
Typescript 
Parâmetro unde�ned
Quando um tipo não é definido, o TypeScript utiliza o undefined. A
sintaxe básica para testar se uma variável undefined é:
Typescript 
Parâmetro object
Há situações em que trabalhamos com dados complexos. Nesse caso,
utilizamos o tipo object do TypeScript, cuja sintaxe é dada por:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
57 of 91 28/04/2024, 16:59
Parâmetro function
Uma das implicações de utilizar arrow funtions é que podemos passá-
las como parâmetros para outras funções. Para testar se um parâmetro
é do tipo function, utilizamos a seguinte sintaxe:
Typescript 
Narrowing con�ável
O TypeScript oferece diversos recursos para trabalhar com narrowing.
Um desses recursos é a utilização do símbolo “?” (interrogação) para
verificar se uma variável é realmente confiável.
Veja um exemplo de como isso funciona na prática:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
58 of 91 28/04/2024, 16:59
O parâmetro “y” da função está escrito “y?” que já indica para o
TypeScript que deve ser verificado se ela é ou não confiável. Além disso,
no retorno da função é utilizado “??” que indica que se a variável “y” não
for confiável, então, deve ser somado o valor “10” à variável “x”.
Confira a saída da execução do código:
Console 
Atividade 1
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
59 of 91 28/04/2024, 16:59
Uma das características que distingue o TypeScript de outras
linguagens de programação é o suporte para narrowing. Há situações
nas quais utilizar o narrowing oferece vantagens. Selecione a opção
correta que apresenta uma dessas situações:
Parabéns! A alternativa D está correta.
A utilização de narrowing no TypeScript oferece flexibilidade do código,
pois é possível verificar qualquer tipo, incluindo tipos personalizados
pelo desenvolvedor. Além disso, também auxilia na reutilização das
funções, pois permite que combinemos vários tipos de dados dentro da
mesma função.
A Eliminar erros de tipos de dados.
B Acelerar o desempenho da execução das funções.
C Implementar funções compatíveis com o JavaScript.
D Garantir a flexibilidade e reutilização de código.
E Trabalhar com vetores heterogêneos.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
60 of 91 28/04/2024, 16:59
Narrowing através de Type
Guards
Apesar de o narrowing ser um recurso interessante em alguns casos,
precisamos ter formas de identificar a que tipo o dado se refere e como
devemos tratá-lo. Felizmente, o TypeScript oferece esse recurso através
dos Type Guards.
Neste vídeo, apresentaremos como utilizar os Type Guards do
TypeScript para se prevenir de erros em tempo de execução devido à
passagem de parâmetros para funções.
Narrowing com if (re�namento)
A forma mais comum de utilizarmos o narrowing em uma função é
definir nos parâmetros quais são os possíveis tipos que a função pode
assumir com o auxílio do símbolo “|” (barra vertical).
Veja um exemplo no qual o parâmetro da função pode ser do tipo“number”, ou “string”. O operador “typeof” é usado para garantir a
proteção do tipo.
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
61 of 91 28/04/2024, 16:59
Devemos perceber que a variável “t_msg” também utiliza explicitamente
o narrowint. A saída, após executar o código, é dada por:
Console 
Narrowing com switch
Outra forma de fazer a verificação da tipagem é com o comando
condicional “switch”. Esse comando é muito útil para testar situações
que envolvem enumeração.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
62 of 91 28/04/2024, 16:59
Confira como utilizar o “switch”:
Typescript 
Como o parâmetro passado para a função “func_testar_ns” foi uma
string, o programa retornou o comprimento da frase, como podemos ver
na saída a seguir:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
63 of 91 28/04/2024, 16:59
Atividade 2
O narrowing é uma das características do TypeScript (TS). Apesar da
flexibilidade que esse recurso oferece, ele também pode gerar dúvidas,
caso não seja bem testado. Selecione a opção correta que apresenta
uma forma eficiente de fazermos a verificação de uma variáveis que usa
narrowing:
A
Devemos utilizar a variável no código e deixar que o TS
faça o gerenciamento dos tipos.
B
O desenvolvedor deve usar a palavra-chave “default”,
pois o TS tentará usar a variável da forma padrão.
C
O desenvolvedor deve usar a palavra-chave “typeof” para
estabelecer como ele deseja que a variável se comporte
dentro do programa.
D Por meio da combinação dos comandos switch-case.
E
O desenvolvedor deve usar o símbolo “$” antes da
variável para indicar que ela pode assumir tipos distintos
dentro do programa.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
64 of 91 28/04/2024, 16:59
Parabéns! A alternativa D está correta.
O narrowing é um recurso bastante flexível no TypeScript. No entanto,
isso faz que a responsabilidade do desenvolvedor aumente, pois é
necessário realizar testes para saber qual o comportamento esperado
da variável. Para isso, a forma mais eficiente é utilizar a combinação
“switch-case”.
Narrowing customizado
Ainda sobre o narrowing, há situações em que podemos realizar testes
personalizados e, assim, ter mais controle sobre a execução do
programa.
Neste vídeo, apresentaremos como tratar de forma personalizada
situações em que ocorre narrowing, por meio de um exemplo concreto.
Roteiro de prática
Dado o código utilizado em nosso exemplo em vídeo, modifique-o de
modo que a função possa concatenar vetores de strings ou vetores de
inteiros.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
65 of 91 28/04/2024, 16:59
inteiros.
Typescript 
Após executarmos os testes, obtemos a seguinte saída:
Console 
Confira a seguir, o passo a passo!
Passo 1: Copia o código para o ambiente de desenvolvimento.
Passo 2: Altera o código de modo que o narrowing identifique
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
66 of 91 28/04/2024, 16:59
Passo 2: Altera o código de modo que o narrowing identifique
corretamente vetores de números inteiros ou strings.
Passo 3: Cria um conjunto de dados de teste.
Faça você mesmo!
Aplicar narrowing pode ser bastante útil, mas é necessário manter
atenção para não criar programas difíceis de entender. Por exemplo,
vamos considerar o trecho de código a seguir:
Console 
Selecione a opção correta a respeito do código ao fazer a chamada
como t(5):
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
67 of 91 28/04/2024, 16:59
Parabéns! A alternativa B está correta.
O código do exercício aplica narrowing através do tipo definido pelo
desenvolvedor que, no caso, é o alfanumérico. Dentro da função, é feito
o teste sobre o tipo do parâmetro. No exemplo dado, o parâmetro é do
tipo numérico. Apesar do laço iterativo, não é feita nenhuma alteração
do valor do parâmetro e ele é utilizado para retorno resultando, portanto,
na impressão de “o resultado é: 5”.
A Vai retornar “o resultado é: 34”.
B Vai retornar “o resultado é: 5” .
C Vai imprimir “string”.
D Vai imprimir “Os argumentos são inválidos”.
E Vai retornar “o resultado é: 15”.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
68 of 91 28/04/2024, 16:59
4 - Classes com TypeScript
Ao �nal deste módulo, você será capaz de aplicar exemplos práticos de classes
com TypeScript.
Conceitos de programação
orientada a objetos
O TypeScript oferece suporte para a programação orientada a objetos.
Isso é uma grande vantagem no desenvolvimento de sistemas, pois
temos recursos como encapsulamento, herança e polimorfismo, o que
nos permite escrever códigos mais organizados e eficientes.
Neste vídeo, apresentaremos o desenvolvimento de aplicações no
TypeScript usando POO. Essa é uma das vantagens que o TS oferece
para auxiliar o desenvolvedor na solução de sistemas confiáveis e
organizados.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
69 of 91 28/04/2024, 16:59
O que é programação orientada a objetos?
A programação orientada a objetos (POO) é um paradigma de
desenvolvimento de software, que tem como elemento central a
utilização de classes (TYPESCRIPT HANDBOOK, 2022).
As classes são modelos computacionais compostos por campos de
dados chamados de atributos e por funções que são chamadas de
métodos. Os métodos são responsáveis por manipular os atributos da
classe.
Aqui, deve ficar claro que as classes são modelos. Mas, para
trabalharmos no programa, precisamos de instâncias dessas classes.
Essas instâncias de classes são chamadas de objetos. O objeto é quem
gerencia os dados e aciona os métodos que vão manipulá-los.
Recomendação
Já faz algum tempo que a POO é o principal paradigma de
desenvolvimento de software que existe. Muitas linguagens de
programação são baseadas em POO, sendo que a mais conhecida é o
Java. O TypeScript também dá suporte para esse de programação e é
uma boa prática fazer uso dela, pois o programa fica muito mais legível
e fácil de manter.
Propriedades da POO
Vimos que o elemento central da POO é a utilização de classes. Outros
conceitos importantes são os de propriedades da POO. Através da
aplicação delas, podemos garantir restrição de acesso, reusabilidade de
código e adaptabilidade de execução. As três principais propriedade de
POO são:
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
70 of 91 28/04/2024, 16:59
Descreve como restringir o acesso a métodos e atributos em
uma classe. O TypeScript possui os seguintes tipos de restrição
de acesso:
• Privado: Membros desse tipo só podem ser acessados
dentro da classe em que foram definidos.
• Protegido: Membros protegidos só podem ser acessados
dentro da classe em que foram definidos, mas também
podem ser acessados pelas classes herdeiras de uma
superclasse.
• Público: Todos os membros de uma classe no TypeScript
são públicos, por padrão. Os membros públicos podem ser
acessados em qualquer lugar sem nenhum tipo de restrição.
Permite herdar os métodos e atributos de outra classe.
Possibilita ter métodos com mesmos nomes, mas com
comportamentos distintos. O modo como o método vai se
comportar vai depender de como fazemos chamadas para ele.
Encapsulamento 
Herança 
Polimorfismo 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
71 of 91 28/04/2024, 16:59
Atividade 1
Uma das características que distingue o TypeScript do JavaScripté o
suporte à programação orientada a objetos (POO). A POO é um
paradigma de programação muito importante e ganhou muita
popularidade através das linguagens de programação como C++, C# e
Java. Selecione a opção correta que apresenta algumas das vantagens
de utilizar a POO no TypeScript:
A
Qualquer código no TypeScript deve ser desenvolvido
com POO.
B
Suporte para utilizar arrow functions nos métodos das
classes.
C As classes aceleram o processamento de um código.
D
A POO é a técnica mais moderna de desenvolvimento de
software.
E Reutilização e flexibilidade de código.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
72 of 91 28/04/2024, 16:59
Parabéns! A alternativa E está correta.
A utilização de POO no TypeScript auxilia a depuração mais fácil do
código, na reutilização dele através da propriedade de herança, aumenta
a flexibilidade por meio do uso do polimorfismo e é mais eficaz na
resolução de problemas devido à representação que uma classe oferece
por seus atributos e métodos.
As propriedades de
encapsulamento e herança
Quando desenvolvemos um sistema, é muito importante que possamos
garantir um comportamento estável dele. Nesse sentido, a propriedade
de encasulamento permite oferecer essa robustez e controlar a
visibilidade dos métodos da classe.
Neste vídeo, apresentaremos como desenvolver uma aplicação com a
propriedade de encapsulamento.
Encapsulamento
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
73 of 91 28/04/2024, 16:59
Para aplicar o encapsulamento, o TypeScript fornece três tipos de
modificadores, que são private, protected e public que correspondem,
respectivamente, aos tipos de acesso privado, protegido e público, como
vimos.:
Observe um exemplo prático desses modificadores de acesso:
Typescript 
No final do código, definimos um objeto “pessoa” como uma classe
“Pessoa”. Apesar de os nomes serem iguais, o TypeScript os diferencia,
pois é sensível à utilização de letras maiúsculas e minúsculas. Esse
código tem vários aspectos interessantes, entre as quais destacamos
as seguintes:
• Utilização dos modificadores private, protected e public.
• Aplicação de Arrow Functions para definir os métodos da classe.
Passagem de valores para os atributos da classe através do
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
74 of 91 28/04/2024, 16:59
• Passagem de valores para os atributos da classe através do
construtor. Esse método é responsável por estabelecer o
comportamento inicial dos objetos.
Veja a saída resultante da execução do programa:
Console 
Herança
Agora, vamos apresentar um exemplo prático da propriedade de
herança. Criamos duas classes: PessoaFisica e PessoaJuridica. Ambas
herdam as características da classe Pessoa que apresentamos no
exemplo anterior. Para indicar a herança, o TypeScript utiliza a plavra-
chave “extends”.
Confira o exemplo de herança:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
75 of 91 28/04/2024, 16:59
Os principais destaques desse exemplo são:
• A utilização da palavra-chave “extends” para fazer a herança das
classes.
• A implementação do método “get_dados” tanto na classe
“PessoaFisica”, como na classe “PessoaJuridica” com a
manipulação de diferentes dados.
Veja as saídas da execução do código:
Console 
Atividade 2
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
76 of 91 28/04/2024, 16:59
Uma das propriedades da programação orientada a objetos é a herança.
O TypeScript (TS) dá suporte a essa propriedade e é uma grande
vantagem utilizá-la. Selecione a opção correta a respeito das vantagens
de utilizar a propriedade herança no TS:
A
Como a programação orientada a objetos é uma técnica
recente e bastante avançada, a herança é mais uma das
propriedades que devemos usar para extrair o máximo
dessa forma de programação.
B
O TS é uma linguagem orientada a objetos que nos
obriga a utilizar os melhores padrões de
desenvolvimento como no caso da propriedade herança.
C
A herança garante que as classes filhas desenvolvam os
métodos da classe mãe fazendo com que o código fique
padronizado.
D
Além de reaproveitar códigos, podemos usar a herança
para estender comportamentos.
E
A maior vantagem de aplicar a propriedade herança no
TS é devido à documentação que ela nos obriga a fazer,
para facilitar a manutenção do código posteriormente.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
77 of 91 28/04/2024, 16:59
Parabéns! A alternativa D está correta.
A herança é uma propriedade da programação orientada a objetos
(POO) que nos permite transferir atributos e métodos para classes
filhas. Como a linguagem TS utiliza a POO, podemos fazer uso desse
recurso para padronizar nossos códigos e reutilizá-los no
desenvolvimento de diferentes sistemas com características
semelhantes.
A propriedade de polimor�smo
O polimorfismo é uma das propriedades mais complexas da POO. No
entanto, há situações nas quais ela se encaixa muito bem. É importante
que o desenvolvedor conheça essa propriedade, pois, há casos em que
ela torna a implementação muito mais simples e de fácil manutenção.
Neste vídeo, apresentaremos como desenvolver uma aplicação com a
propriedade de polimorfismo.
Polimor�smo
A última propriedade que vamos estudar é o polimorfismo. No exemplo,
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
78 of 91 28/04/2024, 16:59
a classe “LinguaPortuguesa” herda as características da classe
“LinguaLatina”. Nas duas classes, implementamos o método
“exibir_informacao()”, mas o resultado gerado pela execução do
programa é diferente, devido ao escopo em o método é implementado.
Veja o exemplo completo:
Typescript 
Cuja saída é dada por:
Console 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
79 of 91 28/04/2024, 16:59
Na saída, podemos perceber claramente que os métodos executados
foram diferentes.
Atividade 3
O polimorfismo é uma das propriedades da programação orientada a
objetos (POO). O uso dela não é natural como no caso das propriedades
de encapsulamento e herança, mas há situações em que ela é muito
vantajosa. O TypeScript (TS), como era de se esperar, também dá
suporte a essa propriedade. Selecione a opção correta a respeito das
vantagens de utilizar a propriedade de polimorfismo no TS:
A
O polimorfismo garante que uma classe mãe vai
padronizar o comportamento de todas as classes
herdeiras.
B
No TS, o polimorfismo aumenta o desempenho com o
qual um método será processado que, de fato, é uma
grande vantagem em aplicações web.
C
O polimorfismo elimina a necessidade de o programador
fazer chamadas a diferentes métodos, necessitando
apenas determinar a classe e os parâmetros.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
80 of 91 28/04/2024, 16:59
Parabéns! A alternativa E está correta.
O polimorfismo é uma das propriedades da POO que deve ser usado em
situações bastante específicas, pois o uso inadequado pode criar
confusão. Por outro lado, há situações em que ele é bastante adequado.
Em especial, quando queremos tratar situações semelhantes como, por
exemplo, renderização de objetos, mas os parâmetros, obviamente, são
diferentes, apesar de o comportamento esperado para o método ser
semelhante.
Classe genérica
Um dos papéis de responsabilidade mais importantes no
desenvolvimento de um sistema é o do arquiteto de softwares. Isso
porque é ele quem deve estabelecer as diretrizes que os
desenvolvedores devem seguir para implementar as funcionalidades deD
O polimorfismo estabelece a visibilidade dos atributos
de uma classe fazendo com que apenas métodos
públicos tenham acesso aos dados dos atributos.
E
A grande vantagem de aplicar a propriedade de
polimorfismo no TS é por causa da flexibilidade de
comportamento que ela pode ter para diferentes
contextos utilizando exatamente o mesmo nome do
método.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
81 of 91 28/04/2024, 16:59
desenvolvedores devem seguir para implementar as funcionalidades de
forma padronizada. Um importante recurso para alcançar esse objetivo
é o uso das classes genéricas que são suportadas pelo TypeScript.
Neste vídeo, apresentaremos o desenvolvimento de uma aplicação com
a propriedade de polimorfismos.
Aspectos conceituais da classe genérica
O TypeScript suporta a utilização de classes genéricas. Classes
genéricas são estruturas lógicas que generalizam comportamentos sem
ficar vinculadas a um tipo específico de dado. São úteis, especialmente,
para a construção de componentes. Para utilizá-las no código, é
necessário especificar o parâmetro de tipo genérico entre ente os
símbolos “<” (menor que) e “>” (maior que) após o nome da classe. Uma
classe genérica pode ter atributos genéricos, como métodos.
Exemplo de classe genérica
Confira um exemplo que utiliza uma classe genérica. Nesse caso, o
nome da classe genérica é “Estudante” e os parâmetros genéricos são
“U” e “T”.
Veja o código que utiliza a classe genérica:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
82 of 91 28/04/2024, 16:59
Devemos notar que os tipos utilizados dentro da classe são definidos
apenas quando um objeto é instanciado.
Observe a saída da execução do código:
Console 
Com isso, concluímos o nosso estudo sobre a linguagem TypeScript.
Apesar de já termos destacado em vários momentos a importância de
executar esses códigos, reforçamos que a melhor forma de aprender
uma linguagem de programação é executando os exemplos e, a partir
deles, fazer modificações e forçar situações que possam levar a erros,
pois, na prática, situações desse tipo vão acontecer com frequência e a
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
83 of 91 28/04/2024, 16:59
pois, na prática, situações desse tipo vão acontecer com frequência e a
melhor maneira de estar preparado para tratá-las é já ter passado por
casos semelhantes.
Atividade 4
Desenvolver um sistema vai muito além da codificação em uma sintaxe
específica. Um exemplo concreto dessa afirmação são as classes
genéricas que, inclusive, são suportadas pela linguagem de
programação TypeScript (TS). Assinale a alternativa correta a respeito
da importância do uso classe genérica no TS:
A
As classes genéricas são uma forma alternativa de se
referenciar à propriedade de herança e, semelhante a
esta, ela tem a capacidade de estender seu
comportamento às classes herdeiras.
B
A classe genérica garante que as classes herdeiras
devem implementar, obrigatoriamente, os métodos dela.
C
A maior vantagem da classe genérica no TS é a clareza
que ela oferece para o código, pois utiliza uma sintaxe
muito simples de trabalhar e documentar o sistema.
D
Uma das vantagens da classe genérica é a velocidade
que ela oferece para a execução de um sistema, pois ela
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
84 of 91 28/04/2024, 16:59
Parabéns! A alternativa E está correta.
Existem várias vantagens em trabalhar com classes genéricas no TS.
Entre essas vantagens estão a organização do código, pois todas as
funcionalidades podem ficar centralizadas em apenas uma classe.
Assim, podemos garantir mais segurança para o sistema e reduzir as
chances de inserir vulnerabilidades, uma vez que a classe vai se adaptar
ao tipo de dados que vamos passar para ela, mas manterá as mesmas
funcionalidades.
Aplicando herança
Vamos ver um exemplo de aplicação de herança e, em seguida,
aplicaremos o conceito na especialização de uma classe que modela
veículos. Sua tarefa será modelar duas especializações da classe
veículos: a primeira especialização será veículos de carga (classe
carga), na qual será inserido o atributo capacidade de carga; na
segunda, veículos de transporte de pessoal (classe carga), em que será
inserido o atributo de número máximo de passageiros.
D que ela oferece para a execução de um sistema, pois ela
utiliza os recursos de forma mais eficiente.
E
As classes genéricas podem ser usadas para garantir
que todas as funcionalidades relacionadas estejam em
uma única classe facilitando, assim, a manutenção e
segurança do código.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
85 of 91 28/04/2024, 16:59
inserido o atributo de número máximo de passageiros.
Neste vídeo, apresentaremos a modelagem do uso de herança para
especializar a classe aluno. Além disso, você vai saber como modelar
duas subclasses: aluno de graduação e aluno de pós-graduação.
Roteiro de prática
Confira a seguir, o passo a passo!
Passo 1: Abrir o ambiente de desenvolvimento.
Passo 2: Colar a classe veículo descrita no código a seguir.
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
86 of 91 28/04/2024, 16:59
Passo 3: Criar as subclasses pessoal e carga com: construtor, e o
método get_dados que informará: renavam, placa e carga ou renavam,
placa e passageiros, conforme o caso.
Faça você mesmo!
A utilização de programação orientada a objetos no TypeScript permite
combinar atributos e métodos em uma unidade lógica chamada de
classe. Por exemplo, vamos considerar o código a seguir:
Typescript 
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
87 of 91 28/04/2024, 16:59
Nesse sentido, selecione a opção correta a respeito da implementação
da classe Conta:
Parabéns! A alternativa B está correta.
A classe está implementada corretamente e a chamada do método
getSaldo vai retornar o valor 20, pois o atributo saldo recebeu o valor 10,
logo que o objeto c foi instanciado. Quando o método construtor não é
implementado explicitamente, o TypeScript utiliza uma implementação
implícita do construtor.
A
Para que a classe funcione corretamente é necessário
implementar o construtor.
B
A execução do comando c.getSaldo() irá retornar o valor
20.
C
Como a classe não possui construtor, o atributo saldo
recebe o valor inicial igual a 0 (zero).
D O método setDeposito retorna um valor igual a 20.
E
É necessário usar o modificador public antes do método
getSaldo.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
88 of 91 28/04/2024, 16:59
O que você aprendeu neste
conteúdo?
• Os principais conceitos do TypeScript.
• Como desenvolver programas no TypeScript para realizar testes.
• Como declarar tipos nas variáveis.
• Como desenvolver funções no TypeScript.
• A usar as funções da biblioteca RegEx no TypeScript.
• A trabalhar com arrow functions.
• A aplicar programação orientada a objetos (POO) no TypeScript.
Explore +
• Acesse o site oficial do TypeScript, pesquise por “download” e
aprenda como instalar o TypeScript na sua máquina local, com uma
sequência de passos.
• Vá ao site oficial do nodejs e procure por procure por “Quick Start”.
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
89 of 91 28/04/2024, 16:59
Lá, você vai encontrar diversos exemplos de JavaScript e TypeScript
que vão lhe ajudar a aprofundar mais os conhecimentos nessas
linguagens de programação.
Referências
ABREU, L. Typescript: o javascript moderno para criação de aplicações.Lisboa: FCA, 2017.
FREEMAN, A. Essential TypeScript. New York: Springer, 2019.
MICROSOFT. The Typescript Handbook. Consultado na internet em: 14
maio 2023.
Material para download
Clique no botão abaixo para fazer o download do
conteúdo completo em formato PDF.
Download material
O que você achou do conteúdo?
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
90 of 91 28/04/2024, 16:59
javascript:CriaPDF()
javascript:CriaPDF()
javascript:CriaPDF()
javascript:CriaPDF()
javascript:CriaPDF()
javascript:CriaPDF()
Relatar problema
Programação cliente com TypeScript https://stecine.azureedge.net/repositorio/00212ti/07666/index.html?bra...
91 of 91 28/04/2024, 16:59

Continue navegando