SlideShare uma empresa Scribd logo
INTRODUÇÃO
INTRODUÇÃO
Ecma6+ / typescript
Ecma6+ / typescript
Prof. Mr. Fabio Abrantes Diniz
fabio.abrantes.diniz@gmail.com
Backend
Backend
Introdução
Introdução
• São a mesma coisa.
 A gente conhece por javascript das antigas que
patentearam.
 Mas o nome oficial hoje é ECMAScript
Introdução
Introdução
Introdução
Introdução
• De 2009 a 2015
• Foram acrescentado muitas features.
• As novas features acrescentadas não invalidam as
anteriores.
• Quando essas features são implementadas os browser
ainda não dão suporte.
https://kangax.github.io/compat-table/es6/
https://caniuse.com/
Introdução
Introdução
• ECMAScript
 Criação de novos tipos de
dados
(Map, WeakMap, Set,
WeakSet);
 Declaração de variáveis com
let e const;
Introdução
Introdução
https://babeljs.io/
Configurando o Babel
Configurando o Babel
1. npm init ou yarn init
 Dar enter sempre
 Gerando o arquivo package.json
2. Instalar a dependência Babel
1. Yarn add @babel/cli ou npm install @babel/cli
2. Yarn add @babel/preset-env ou npm install
@babel/preset-env
 Cria o arquivo node_modules
3. Yarn add @babell/core ou npm install @babel/core
Configurando o Babel
Configurando o Babel
3. Criar o arquivo de controle de vesão
 .gitignore (opcional) contendo o seguinte código
 node_modules/
4. Babel
 Criar o arquivo na raiz do projeto
 .babelrc contendo o seguinte código
Configurando o Babel
Configurando o Babel
5. Dentro de package.json adicionar um script
que executará o comando do babel para
gerar nosso bundle.js
6. Executar o comando yarn dev ou npm run
dev
 Vai transformar o arquivo main.js no bundle.js
Conceitos ECMA6+
Conceitos ECMA6+
• Classes
 provêm uma maneira mais simples e clara de criar
objetos e lidar com herança.
 Declarando
Conceitos ECMA6+
Conceitos ECMA6+
• Classes (Outras formas de Declarações)
 Expressão de Classe
Conceitos ECMA6+
Conceitos ECMA6+
• Corpo de Classes, definições de métodos,
construtores e operadores new e this
Conceitos ECMA6+
Conceitos ECMA6+
• Heranças de classes (extends)
Conceitos ECMA6+
Conceitos ECMA6+
• Const e let
 var
funciona em todos browsers cross-browser
Posso criar variáveis com mesmo nome
Posso declarar sem atribuir valor
 let
Não deixa criar variáveis com mesmo nome
Posso declarar sem atribuir valor
 const
Não posso declarar sem atribuir um valor
Não posso atribuir outro valor caso ele foi já
atribuído
Conceitos ECMA6+
Conceitos ECMA6+
• Const e let
 const
Não posso declarar sem atribuir um valor
Não posso atribuir outro valor caso ele foi já
atribuído
– Em objetos e array pode atribuir em suas
propriedades (mutação)
Conceitos ECMA6+
Conceitos ECMA6+
• Escopo
Conceitos ECMA6+
Conceitos ECMA6+
• Operações em array ()
for .. of
map()
Foreach()
Reduce()
Filter()
Find()
Slice()
Splice()
indexOf()
Includes()
Join()
Conceitos ECMA6+
Conceitos ECMA6+
Conceitos ECMA6+
Conceitos ECMA6+
• Arrow functions
Conceitos ECMA6+
Conceitos ECMA6+
• Valores padrões
 Os parâmetros predefinidos de uma função
 os parâmetros de funções tem undefined como
valor predefinido
Conceitos ECMA6+
Conceitos ECMA6+
• Desestruturação
 expressão que possibilita extrair dados de
arrays ou objetos em variáveis distintas.
Conceitos ECMA6+
Conceitos ECMA6+
• Operador rest
 permite representar um número indefinido de
argumentos como um array
npm install @babel/plugin-proposal-object-rest-spread
Configurar o arquivo .babelrc
– "plugins": ["@babel/plugin-proposal-object-rest-spread"]
Conceitos ECMA6+
Conceitos ECMA6+
• Operador spread
 permite que um objeto, uma expressão de array ou
uma string seja propagado
Conceitos ECMA6+
Conceitos ECMA6+
• Template literals
 são strings que permitem expressões
embutidas.
utilizar string multi-linhas e interpolação
de string com expressões.
Conceitos ECMA6+
Conceitos ECMA6+
• Sintaxe curta de Objeto
•Quando temos o nome da variável igual o
nome da propriedade do objeto.
•Não precisa atribuir a variável na propriedade.
Webpack Server ECMA6+
Webpack Server ECMA6+
• Serviço que vai permite trabalhar com vários
arquivos
 Convertido em único arquivo bundle.js
Fonte: https://webpack.js.org/
Webpack Server ECMA6+
Webpack Server ECMA6+
• Fazendo o recurso de módulos
funcioanando no front-end
 Configurando Webpack
1. npm install webpack webpack-cli –D
2. npm install babel-loader@8.0.0-beta.0 -D
Webpack Server dev
Webpack Server dev
ECMA6+
ECMA6+
• Depois instalar a
dependência
 npm install webpack-dev-server –D
 Criar e Configurar os arquivos
package.json webpack.config.js
 Depois npm run dev
Webpack Server ECMA6+
Webpack Server ECMA6+
• Import
 usada para importar vínculos que são
exportados por um outro módulo.
 Sintaxe
Webpack Server ECMA6+
Webpack Server ECMA6+
• Export
•utilizado para funções, objetos ou valores
primitivos de um módulo sejam utilizados
• por outros programas
• declarações import.
Webpack Server ECMA6+
Webpack Server ECMA6+
• Sintaxe do export
Webpack Server ECMA6+
Webpack Server ECMA6+
• Exemplo import/export
require() no NodeJs
require() no NodeJs
• Usados em JavaScript para importar e exportar
módulos
• Pertence a CommonJS
 E não da API ECMA
• Mais informações
 https://nodejs.org/api/modules.html
require() x import
require() x import
• require()
 Desenvolvida pelo Nodejs
 Módulos carregado de maneira síncronas
 usa module.exports (sintaxe antiga)
• Import
 ECMA+
 Módulos carregados assincronamente
 usar module.exports e export
Importa partes do que foi exportados
require() x import
require() x import
Webpack Server Dev
Webpack Server Dev
• Organizar as pastas
Public
– Html, css, bundle.js
» Arquivos que o webpack não monitora
Src
– Código javascript
– Webpack vai monitorar as mudanças
Import/export ECMA6+
Import/export ECMA6+
• Fazendo funcionar no node sem o babel
 Duas maneiras
1. Alterar o package.json
– Adicionando "type": "module",
» https://nodejs.org/api/packages.html#packages_type
2. Instalar a biblioteca esm
– npm install esm
– Depois executar o arquivo que import
» node -r esm main.js
Async/await ECMA6+
Async/await ECMA6+
• Funções assíncronas x funções normais
 Funções normais
É executada sequencialmente
– Se tivermos duas funções A e B. A é a primeira a
executar
» B só iniciraá executar quando A terminar
 Funções Assínccronas
Se tivermos duas funções A e B. Se A executar
primeiro.
– B também poderá executar, sem esperar A finalizar
Async/await ECMA6+
Async/await ECMA6+
• Async function
 Define uma função assíncrona
Retorna uma Promise
 Sintaxe
Async/await ECMA6+
Async/await ECMA6+
• await function
 é utilizado para esperar por uma Promise.
 Sintaxe
Retorna um valor final da promise
Async/await ECMA6+
Async/await ECMA6+
• Instalar o plugin para o babel entender o
async/await
 npm install @babel/plugin-transform-async-to-generator -
D
 npm install @babel/polyfill -D
• Depois
 Configurar o .babelrs
 E por fim configurar p webpack.config.js
Async/await ECMA6+
Async/await ECMA6+
• Exemplo Async/await function
Async/await ECMA6+
Async/await ECMA6+
• Exemplo Async/await function
Async/await ECMA6+
Async/await ECMA6+
• Mais Exemplos Async/await function
 npm install --save cross-fetch
import fetch from 'cross-fetch’;
Async/await ECMA6+
Async/await ECMA6+
• Biblioteca Axios
 Um cliente HTTP, que funciona tanto no browser
quanto em node.js.
Api para trabalhar com requisições assíncronas
Todas as funções do axios retornam promisses
 Instalação
npm install axios
Async/await ECMA6+
Async/await ECMA6+
• Biblioteca Axios
 Características
• Faz requisições http
• get(), post(), put(),delete() e all()
• Criação de instâncias
• Create()
• Transforma respostas em JSON automaticamente
• Suporte a requisições assíncronas
• Mais informações
 https://www.npmjs.com/package/axios#creating-
an-instance
Async/await ECMA6+
Async/await ECMA6+
• Exemplo usando Biblioteca Axios
Typescript
Typescript
• Introdução
Typescript
Typescript
• Introdução
https://www.typescriptlang.org/
Typescript
Typescript
• Introdução
Typescript
Typescript
• Por que Typescript?
 Estende o JavaScript adicionando tipos.
 Economiza seu tempo ao detectar erros
 Fornece correções antes de executar o código.
Typescript
Typescript
• Por que Typescript?
Typescript
Typescript
• Por que Typescript?
Typescript
Typescript
• Por que Typescript?
Typescript
Typescript
• Mitos e verdade?
Typescript
Typescript
• Configurando o projeto
 Escolha uma pasta onde estará seu código
Workspace
– npm init –y ou yarn init –y
» Gerar o package.json
Instalar dependência typescript
– npm install typescript –D ou yarn add typescript –D
Depois gerar o arquivo tsconfig.json
– npx tsc --init
Typescript
Typescript
• Configurando o projeto
 Depois configurar dentro do tsconfig.json
Habilitar: "outDir": "./dist",
 Depois codar
Exemplo usando a biblioteca express.
Comandos
– yarn tsc ou npx tsc
» Encontra os arquivos .ts e convertem em .js
– node /arquivo.js
» Executar o código javascript do arquivo
Typescript
Typescript
• Tipagem Explícita
 Especificamos o qual será o tipo de cada variável.
Typescript
Typescript
• Any
 Ao declarar uma variável no TypeScript
O seu tipo por padrão será any.
– não é muito recomendada a sua utilização
» Aceita qualquer dado
» Perde a utilidade da essência de tipagem
Typescript
Typescript
• Inferência de tipos
 O TypeScript reconhece automaticamente o tipo
da variável ao passar algum valor para ela.
Typescript
Typescript
• Tipos primitivos
Typescript
Typescript
• Matrizes
 Existem duas maneiras de tipar arrays no
TypeScript, confira os exemplos:
Typescript
Typescript
• Funções (parei pw2)
 Uma função pode ter ou não um retorno,
quando ela não tem um retorno é do tipo void
quando a função tem um retorno, a tipagem é inferida
automaticamente na função.
Typescript
Typescript
• Union (parei aqui pw1 e pdm)
 Representado pelo pipe | nos permite adicionar
mais de um tipo na variável.
Typescript
Typescript
• Generics
 Permite reutilizar uma determinada implementação de código,
de forma tipada.
 Para representar um generic, nós declaramos dessa
forma <T>
(podendo ser utilizado qualquer outra letra, existem as
convenções que podemos seguir:)
– <S> Representando
→ State
– <T> Representando
→ Type
– <K> Representando
→ Key
– <V> Representando
→ Value
– <E> Representando
→ Element
Typescript
Typescript
• Generics
 Permite reutilizar uma determinada implementação de
código, de forma tipada.
Typescript
Typescript
• Generics
 Permite reutilizar uma determinada implementação de
código, de forma tipada.
Typescript
Typescript
• Type
 Para não ficar sempre repetindo os tipos para
todas as variáveis
podemos criar Types para cada uma delas.
Typescript
Typescript
• Type Assertions
 É utilizado quando o TypeScript não sabe qual é
a tipagem em um determinado objeto.
Criar um type informando quais são as propriedades
desse objeto
Typescript
Typescript
• Objetos
 como criar tipagens utilizando objetos no
TypeScrip
Typescript
Typescript
• Objetos
 como criar tipagens utilizando objetos no
TypeScrip
Typescript
Typescript
• Propriedades Opcionais
 Para informamos que uma propriedade é
opcional inserimos o sinal de ?
Typescript
Typescript
• Intersecção de Tipos
 Unir dois tipos e usar as suas propriedades
dentro de um objeto. Usando & ou |
Typescript
Typescript
• Interface
 Outra maneira de criar tipagens no TypeScript é
utilizando a interface
Typescript
Typescript
• Type e Interface
 Ambos serve para definir tipagens no
TypeScript.
 O type é mais recomendado por ser mais
simples, fácil de lidar com tipos primitivos,
por ser mais flexível.
 Já as interfaces são utilizadas normalmente em
criação de libs,
para aqueles que gostam da programação orientada a
objetos.
Typescript
Typescript
• Type e Interface
Typescript
Typescript
• tsconfig
 É um arquivo de configuração do TypeScript,
pode ser escrito tanto em formato de JavaScript
quanto no formato JSON.
https://www.typescriptlang.org/tsconfig
Typescript
Typescript
• Projeto
 Desafio prático em sala de aula
transforma um projeto que está totalmente em
Javascript para typescript
– Link do repositório
» https://github.com/fabioabrantes/
ListaParticipacao/tree/main
– Fazer os seguintes passos para usá-lo
1.git clone (clonando o projeto)
2.cd pastaProjeto (acessando o diretório)
3.npm install (instalando as dependências)
4.npm run dev (executando o projeto)
Typescript
Typescript
• Adicionando TypeScript
1. Instalando o TypeScript no projeto:
npm install --typescript --save-dev
2. Criar um arquivo tsconfig.json na raiz do projeto
– npx tsc --init
Ou usar o arquivo abaixo, caso não queira executar
esse comando e colocar na raiz do projeto
– https://drive.google.com/file/d/
19QHI2jK9N4UgWKNXKTrCsUs4iHjvKFUS/
view?usp=sharing
Typescript
Typescript
• Tipando Componente
 Colocar as extensões dos arquivos para .ts, tsx
Tipar os componentes no projeto
No arquivo index.html, atualizar o script para main.tsx
– <script type="module" src="/src/main.tsx"></script>
 Instalar as tipagens do react
npm i --save-dev @types/react
Typescript
Typescript
• Tipando Componente
Typescript
Typescript
• Tipando Estados
 Tipando a página Home
Aproveitar a tipagem do Card importando o na página
Home.
Em seguida passar as tipagens para o estado
Typescript
Typescript
• Tipando resposta de API
 Precisamos criar dois types
Typescript
Typescript
• Quando adicionar tipos
• Foi adicionado a tipagem do express
 yarn add @types/express
Typescript
Typescript
• Quando adicionar tipos
• Exemplo de como como trabalhar com a
mesma tipagem de dependências em
arquivos separados.
Typescript
Typescript
• Tipando objetos e vetores
• Exemplo de como tipar nossas próprias
constantes
 Fazendo com que o IntelliSense da IDE nos auxilie
Typescript
Typescript
• Tipando objetos e vetores
• Vamos importar esse código em outro arquivo
 O que acontece!
Typescript
Typescript
• Tipando objetos e vetores
• Vamos importar esse código em outro arquivo
 O que acontece!
Typescript
Typescript
• Tipando vetores
• Vamos importar esse código em outro arquivo
 O que acontece!
Typescript
Typescript
• Guia typescript
 https://www.notion.so/Typescript-
5712aeab312d44fcba0aa88895caad36
 https://www.typescriptlang.org/

Mais conteúdo relacionado

PDF
Criando Webservice REST com NodeJS, NoSQL & Docker
PPTX
Node JS - Parte 2
PPTX
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
PPTX
Solucionando a Teoria do Caos com Cypress.io
PPTX
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
PPTX
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
PDF
Angular 2 em 60 minutos
PDF
Devfest Cerrado: Angular 2
Criando Webservice REST com NodeJS, NoSQL & Docker
Node JS - Parte 2
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
Solucionando a Teoria do Caos com Cypress.io
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Angular 2 em 60 minutos
Devfest Cerrado: Angular 2

Semelhante a aula de introdução a ecamscript e typescript (20)

PPTX
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
PDF
Tutorial visão automação de testes e casper js
PPTX
Tutorial - Visão sobre Automação de Testes com CasperJS
PPTX
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
PPTX
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
PPTX
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
PPTX
PDC - Engenharia - Plataforma Microsoft .NET
PDF
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
PPTX
C# 6.0 - DotNetBaixada - Novembro/2015
PPTX
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
PDF
Kernel Livepatching na prática: Hands On
PPTX
C# 6.0 - Interopmix 2015
PPTX
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
PDF
Source-to-container no mundo real
PPTX
Linguagem Java, fundamentos da linguagem Java
PDF
cypress.pdf
PDF
O poder do Docker (7º meetup de Docker SP)
PPTX
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
PDF
Mean Stack
PPTX
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Tutorial visão automação de testes e casper js
Tutorial - Visão sobre Automação de Testes com CasperJS
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
PDC - Engenharia - Plataforma Microsoft .NET
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
C# 6.0 - DotNetBaixada - Novembro/2015
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Kernel Livepatching na prática: Hands On
C# 6.0 - Interopmix 2015
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Source-to-container no mundo real
Linguagem Java, fundamentos da linguagem Java
cypress.pdf
O poder do Docker (7º meetup de Docker SP)
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Mean Stack
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Anúncio

Último (7)

PDF
Dos requisitos ao código: como criar código rastreável em PHP
PDF
Evolução em código: algoritmos genéticos com PHP
PDF
apresentacao introducao computacao ead.pdf
PPTX
Curso de Windows 11 resumido na prática.pptx
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PPTX
Mapeamento de Objeto para Tabela Relacional
Dos requisitos ao código: como criar código rastreável em PHP
Evolução em código: algoritmos genéticos com PHP
apresentacao introducao computacao ead.pdf
Curso de Windows 11 resumido na prática.pptx
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Mapeamento de Objeto para Tabela Relacional
Anúncio

aula de introdução a ecamscript e typescript

Notas do Editor

  • #1: A função principal dele é analisar o código que você escreveu, independente se for em CoffeeScript, ES2015 ou TypeScript e transformar em JavaScript puro que é entendido pelos browsers.
  • #2: JSON é basicamente um formato leve de troca de informações/dados entre sistemas. Mas JSON significa JavaScript Object Notation JSON é uma sintaxe para serialização de objetos, matrizes, números, strings, booleanos, e null. Serve para representar dados estruturados com base na sintaxe do objeto JavaScript É comumente usado para transmitir dados em aplicativos da Web por exemplo, enviar alguns dados do servidor para o cliente, para que possam ser exibidos em uma página da Web ou vice-versa. Só posso usar com JavaScript correto? Na verdade não e alguns ainda caem nesta armadilha podemos comparar o JSON com o formato XML Vantagens do JSON: Leitura mais simples Analisador(parsing) mais fácil JSON suporta objetos! Sim, ele é tipado! Velocidade maior na execução e transporte de dados Arquivo com tamanho reduzido Quem utiliza? Google, Facebook, Yahoo!, Twitter...
  • #3: O que é ecma O ECMAScript (ES) é a especificação da linguagem de script que o JavaScript implementa, ou seja, é a descrição formal e estruturada de uma linguagem de script, sendo padronizada pela Ecma International – associação criada em 1961 dedicada à padronização de sistemas de informação e comunicação – na especificação ECMA-262. No dia 17 de junho de 2015, foi definida a sexta edição da especificação, a ES6 (também chamada de ECMAScript 2015).
  • #4: De 2009 a 2015 6 anos de diferença. Neste período foram acrescentado muitas features. A gente vai ver essas features até a versão 2016. As novas features acrescentadas não invalidam as anteriores. Quando essas features são implementadas os browser ainda não dão suporte. Não sabemos se todos os browsers dos usuários suportam.
  • #5: Não sabemos se todos os browsers dos usuários suportam.
  • #6: O principal objetivo da nova versão especificação foi tornar a linguagem mais flexível, enxuta e fácil de se aprender e trabalhar, tornando-a mais próxima a outras linguagens orientadas a objeto, como Java e Python. Webpack– servidor que fica dando reload nas alterações do código sem precisar f5. Ativa o babel para converter feature ecma6+ para ecma5 automaticamente. Ou seja numa sintaxe que os ambientes entendem Rest/spread: permitem trabalhar com múltiplos parâmetro em funções. Sendo o Rest utilizado para permitir que uma função receba um número indefinido de parâmetros, enquanto o spread permite definir um número indefinido de parâmetros para uma função, Array ou objeto Desestrutuação: é forma de recuperar propriedade de objetos e array de maneira mais fácil. Import/ export uma das features mais utilizados do ecma6. serve para importar funcionalidade de outros arquivos. E o export permite que outros arquivos acessam por meio do import as features feitas. Faz uma modulação Async/ await: trabalhar com programação assíncrona em javascript
  • #7: O Babel é um transcompilador JavaScript gratuito e de código aberto usado principalmente para converter o código ECMAScript 2015+ em uma versão compatível com versões anteriores do JavaScript que pode ser executada por mecanismos JavaScript mais antigos Ecma6+ Ou seja novas formas de fazer o código javascript. Ex: classes. O babel transforma em sintaxe de função.
  • #8: package.json dentro da raiz do nosso projeto Conter todas as dependências. Controla todas as ferramentas de outras empresas ou desenvolvedores na nossa aplicação Ex: o babel é uma dependência da nossa aplicação @babel/cli Nos possibilita para trabalhar com a interface de linha de comando do babel por meio do terminal @babel/preset-env. Indentifica o ambiente que o babel vai manipular para transpilar (mobile, node, web) Pq cada um tem suas features que precisa transpilar para javascript mais entendível. node_modules: não precisa mecher. Armazena todas as dependências e de outros pacotes que o babel depende
  • #9: Para que serv o babel (lembrar os alunos) o preset-env vai entender qual o ambiente está trabalhando (navegador,node, mobile com react native) com este projeto Se tiver código ecma6+ vai converter as novas features para código mais antigo que os navegadores já entendem O node já entende uma porrada de funcionalidade então não vai converter os que o node conhece. Somente os que não entende
  • #10: O bundle.js conterá o código javascript que todo ambiente entende -w. fica monitorando com que sempre que alterar o arquivo main.js o babel dar update no bundle Só testar!! Criar uma class contenho dois métodos
  • #11: As Classes são, de fato, "funções especiais", e, assim como você pode definir "function expressions" e "function declarations", a sintaxe de uma classe possui dois componentes: "class expressions" e  "class declarations". Para declarar uma classe, você deve usar a palavra-chave class seguida pelo nome da classe (aqui "Retangulo").
  • #12: Expressões de Classes podem possuir nomes ou não (anônimas). O nome dado para uma expressão de classe é local ao corpo da classe.
  • #13: O método constructor é um tipo especial de método para criar e iniciar um objeto criado pela classe. O método constructor é um tipo especial de método para criar e iniciar um objeto criado pela classe. Propriedades de instâncias devem ser definidas dentro da classe: (this)
  • #14: Note que super(), usada no construtor, só pode ser usada em construtores e deve ser chamada antes da chave this ser usada. super é utilizada para chamar funções que pertencem ao pai do objeto.
  • #15: Let: Declara uma variável local no escopo do bloco atual, opcionalmente iniciando-a com um valor.  const cria uma variável cujo o valor é fixo, ou seja, uma constante somente leitura. Isso não significa que o valor é imutável, apenas que a variável constante não pode ser alterada ou retribuída.
  • #16: Let: Declara uma variável local no escopo do bloco atual, opcionalmente iniciando-a com um valor.  const cria uma variável cujo o valor é fixo, ou seja, uma constante somente leitura. Isso não significa que o valor é imutável, apenas que a variável constante não pode ser alterada ou retribuída.
  • #17: Quando você declara uma váriavel fora de qualquer função, ela é chamada de variável global, porque está disponível para qualquer outro código no documento atual. Quando você declara uma variável dentro de uma função, é chamada de variável local,  pois ela está disponível somente dentro dessa função. {} chama escopo Posso declara dois let com mesmo nome em escopo diferente
  • #19: Os parênteses são opcionais quando há apenas um nome de parâmetro: A lista de parâmetros para uma função sem parâmetros deve ser escrita com um par de parênteses. Uma expressão arrow function possui uma sintaxe mais curta quando comparada a uma expressão de função (function expression) e não tem seu próprio this, arguments, super  Muito utilizado quando temos funções que recebe como parâmetro uma call-back Quando se tem somente uma linha omite o return. Não funciona quando retorna objeto. Tem que colocar um parêntese. Pq a chave do objeto ele pensa que é da função
  • #20: Os parênteses são opcionais quando há apenas um nome de parâmetro: A lista de parâmetros para uma função sem parâmetros deve ser escrita com um par de parênteses. Uma expressão arrow function possui uma sintaxe mais curta quando comparada a uma expressão de função (function expression) e não tem seu próprio this, arguments, super 
  • #21: permitem que parâmetros regulares sejam inicializados com com valores iniciais caso undefined ou nenhum valor seja passado. se nenhum valor for fornecido para b na chamada, este valor será undefined, quando a*b for calculado resultaria em NaN. Outros resultados podem dar undefined
  • #22: A atribuição via desestruturação usa sintaxe similar, mas no lado esquerdo da atribuição são definidos quais elementos devem ser extraídos da variável de origem. Uma variável pode ter seu valor atribuído via desestruturação separadamente da sua declaração.
  • #23: Se o último argumento nomeado de uma função tiver prefixo com  ..., ele irá se tornar um array em que os elemento de 0 (inclusive) até theArgs.length (exclusivo) são disponibilizados pelos argumentos atuais passados à função No exemplo, nós usamos o rest parâmetro para buscar argumentos do segundo parâmetro para o fim. Nós multiplicamos eles pelo primeiro parâmetro:
  • #24: para ser usado onde zero ou mais argumentos (para chamadas de funções) ou elementos (para arrays literais) são esperados, ou que um objeto seja expandido onde zero ou mais pares propriedade:valor (para objetos literais) são esperados. Criar um novo array usando um array existente como parte dele, não é possível utilizando apenas a sintaxe de array literal.  Sem o spread era feito assim arr1 = arr1.concat(arr2);
  • #25: Template strings são envolvidas por (acentos graves) (` `) em vez de aspas simples ou duplas.  Template strings podem possuir placeholders. Estes são indicados por um cifrão seguido de chaves (${expression}).  Qualquer caracter de nova linha inserido no código é parte da template string. Utilizando strings normais, você teria de usar a síntaxe a seguir para obter strings multi-linhas:
  • #26: observa que não atribuí a variável. pois eles tem o mesmo nomeX e mesmo assim ele recebe o valor da variável
  • #27: Um serviço que vai nos disponibilizar trabalhar com vários arquivos. E todo esse co´digo vai ser convertido no bundles.js
  • #28: os desenvolvedores aproveitaram para trazer os módulos para o mundo dos browsers com o Webpack, melhorando muito a modularização no frontend. A função principal dele é analisar o código que você escreveu, independente se for em CoffeeScript, ES2015 ou TypeScript e transformar em JavaScript puro que é entendido pelos browsers.
  • #29: A função principal dele é analisar o código que você escreveu, independente se for em CoffeeScript, ES2015 ou TypeScript e transformar em JavaScript puro que é entendido pelos browsers.
  • #30: devServer content Caminho onde estará o arquivo index.html Quando executa npm run dev : Não gera o bundle.js na pasta public mas o webpack server dev embute e também gera um link de servidor Não ver fisicamente dentro da pasta public Se precisar desse bundle.js para produção online Executar o comando npm run build que gera o bunlde.js
  • #31: defaultExport Nome que de referência para a exportação padrão do módulo. module-name módulo para importar. Geralmente, esse é um nome de caminho relativo ou absoluto para o arquivo .js contendo esse módulo.  Name Nome do objeto do módulo que será usado como um tipo de espaço de nomes ao se referir às importações. export, exportN Nome das exportações a serem importadas. alias, aliasN Nomes que se referem às importações nomeadas.
  • #33: Cada arquivo só pode ter um exporta default No import permite que demos um nome qualquer para esse tipo de export
  • #35: Quando o Node.js foi criado, a proposta de módulos Ecmascript ainda não existia. Os desenvolvedores envolvidos no projeto decidiram utilizar módulos CommonJS (o clássico require), que era mantido pela organização criada pelo Mozilla para padronizar o ecossistema javascript fora dos browsers. Essa organização não tem ligação com o TC39 que é responsável pelo Ecmascript. O CommonJS deixou de ser mantido. Os responsáveis pelo Node.js e npm assumiram a especificação dos módulos, possibilitando a criação de um grande ecossistema javascript. a maneira que o Node.js criou para importar e exportar modulos dentro de uma aplicação
  • #36: O require é uma forma que foi desenvolvida para Node.js de importar e exportar módulos em uma aplicação Não precisa do babel para transpilar o import é ES6, ou seja uma nova ferramenta que ambos JavaScript do browser e JavaScript do servidor (Node.js) podem usar. Precisa ser transpilado para bundle.js pelo babel e Webpack() O carregamento é síncrono (passo a passo), pois, require por outro lado, import pode ser assíncrono (sem aguardar a importação anterior), por isso pode ter um desempenho um pouco melhor que require O import usa ambos, ou seja podes usar module.exports e export, e permite exportar vários pedaços de código  Uma das vantagens do import é que pode importar só partes do que foi exportado:  Isso pode economizar memória.
  • #37: O require usa module.exports, que é a sintaxe "antiga" (mas ainda válida) para exportar um módulo, e que pode ser o que quisermos, um objeto, uma string, etc.
  • #38: Um servidor offline para fazermos nosso projeto Quando salvarmos nosso projeto dar um refressh no nosso app rodando Deixar o main e deletar o bundle.js
  • #40: Exemplo 1) Eu vou a uma pizzaria, peço uma pizza para viagem no balcão e fico plantado lá, só esperando me entregarem o pedido para que eu possa ir embora. Exemplo 2) Eu vou a uma pizzaria, peço uma pizza para viagem no balcão e, enquanto ela não fica pronta, dou uma passada na livraria ao lado para folhear a biografia de algum vlogger teen e tentar descobrir uma serventia para aquela obra se não como alternativa emergencial ao papel higiênico. Se você conhece os conceitos básicos de assincronismo, é fácil compreender que o exemplo 1 é um caso típico de operação síncrona, pois minha vida parou completamente até que o pizzaiolo completasse seu trabalho. No exemplo 2, por outro lado, resolvi aproveitar meu precioso tempo ocioso degustando alguma pérola literária repleta de vazio. Isso é assíncrono se tiveres uma função assíncrona A() (por exemplo, que realize uma operação de I/O ou outra operação bloqueante), esta pode ser chamada e enquanto a operação é realizada podes executar outra função B() (assíncrona ou não) no contexto principal (main thread). Mais tarde, a função A() irá retornar o seu valor quando terminar a operação e houver disponibilidade da main thread para tal
  • #41: Async. Essa palavra pode ser usada ao criar uma função convencional. Quando adicionamos esse identificador na criação desta função, nós definimos que ela será uma função assíncrona, e o melhor, retornará uma promessa! Quando usarmos a expressão return estaremos, na realidade, resolvendo uma promessa. Um Promise representa um proxy para um valor que não é necessariamente conhecido quando a promessa é criada. As async functions fazem código assíncrono parecer síncrono.  a função assíncrona retornar um valor, a Promise será resolvida com o valor retornado.. Um Promise (de "promessa") representa um valor que pode estar disponível agora, no futuro ou nunca. As Promises, por sua vez, representam um valor e são uma maneira da função que a retornou te garantir que você irá receber aquele bendito valor. Quando a função concluir o processamento necessário para te retornar aquilo que ela havia te prometido, você será avisado, receberá o valor esperado e poderá fazer o que quiser com ele. Infelizmente, há muitas funções caloteiras por aí, e algumas vezes você pode acabar não recebendo o que espera por conta de algum imprevisto (exemplo: a conexão caiu no meio de uma requisição). Quando a função assíncrona lança uma exceção ou algum valor, a Promise será rejeitada com o valor lançado.
  • #42:  Await. Essa palavra será usada com o objetivo de esperar a resolução de uma função assíncrona. Se houver uma série de funções assíncronas, a expressão await definirá que o código só terá sequência quando a função anterior for resolvida. A expressão await faz a execução de uma função async pausar, para esperar pelo retorno da Promise Um detalhe muito importante: a expressão await só será aceita em uma função que já for assíncrona, ou seja, que possuir o identificador async em seu início.
  • #44: Nós iremos criar três funções que irão manipular uma string: uma que irá converter a primeira letra da string para maiúscula; 2) uma que irá inverter o conteúdo da string e 3) uma que irá adicionar um texto a essa string. Todas essas funções serão promessas. Veja o código de criação delas: {
  • #45: como uma função é chamada abaixo da outra, de maneira independente, parece que o nosso código é síncrono, mais intuitivo, simples de entender, mas “por baixo dos panos” está ocorrendo um código assíncrono. Antes de executar esse código, precisamos fazer apenas mais uma coisa: lembra que dissemos que o await só funciona em uma função assíncrona? Então, para evitar erros, vamos adicionar a chamada das funções em uma função principal, que nós podemos chamar de callFunctions(). O código final ficará assim: as promessas recuperam os erros com o método .catch()
  • #46: o método global fetch() que fornece uma maneira fácil e lógica para buscar recursos de forma assíncrona através da rede. https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API/Using_Fetch perceba que usamos o await na chamada da função fetch(), pois ela retorna uma promessa. Além disso, usamos o await na linha abaixo dela também, pois o método .json() é uma promessa da mesma forma. const fetch = require('cross-fetch');
  • #47: Requisições http são um dos principais recursos usados no desenvolvimento web, já que são necessárias para acessar o backend de nossas aplicações, banco de dados, entre outros. Por isso, foi criado um dos pacotes mais famosos(se não o mais) de requisições javascript, o axios. Isso significa que o mesmo código utilizado para fazer requisições no browser também funciona no servidor. Além disso, as requisições feitas através da biblioteca retornam uma promise, compatível com a nova versão do JavaScript - ES6.
  • #48: Get Requisições get são tipos que, normalmente, não possuem corpo com a requisição, apenas headers e querys. Post Diferente de requisições get, o post já necessita de corpo. Tipo post são usados para gravar alguma informação dentro do servidor, como dados de usuário, imagens,vídeos, etc. Put Requisições do tipo put são usadas para atualizar algum tipo de informação dentro do servidor, como usuário, produto, post, etc. Assim como o post, este recebe um corpo dentro da requisição, o valor mandado sobreporá o valor atual do servidor. Delete A requisição delete, assim como o próprio nome diz, serve para deletar um dado do servidor. Assim como o get, ele não tem corpo, e também, não retorna nada, apenas um estado de sucesso. A função precisara apenas do id do post Axios.all O método all do axios serve para fazer duas ou mais requisições no mesmo método. Dentro do método, ele recebe um array que terá as requisições, podendo ser de diferentes métodos. Criando Instâncias Com o aumento de seu projeto, várias e várias requisições são feitas para a api, aumentando a complexidade da manutenção. Caso ter que fazer manutenção em algum dado que é usado por todas as requisições, isso tornará extremamente complexo e ineficiente, e para isso, existe a forma de criar instâncias no axios usando o axios.create.
  • #50: Na prática vamos programar com javascript Não é uma caixa de ferramenta com códigos prontos para utilizar
  • #51: É uma extensão de javascript tipado Possibilidade do editor detectar erros antes da produção. A linguagem javascript não detecta. O typescript detecta por exemplo uma função que receba somente número O TypeScript foi criado pela Microsoft para trazer um superset de tipagens para o JavaScript. A diferença entre o JavaScript e TypeScript é a sua tipagem que no JS não é obrigatório, já no TS é obrigatório, mas nem pra todos os casos. Algumas vantagens de utilizar o TS é que a sua adoção pode ocorrer de forma gradual em um projeto JavaScript. Usando o playground do typescript para testes.
  • #52: Os navegadores não entende .ts. Somente em ambiente de desenvolvimento são utilizados No ambiente de produção são transpilados para .js Mas por que usar ts se no fim vai usar javascrit
  • #53: Acessa as features mais recentes. , pois o typescript, por se só, o browser e o node não entende Precisa converter o código em código javascript que os browser e nodejs entendam Funciona com um babel
  • #54: usando javascript fica difícil saber o formato dos objetos. Se a gente não sabe o formato O editor também não saberá Sem o typescript nosso editor fica burro para saber o formato. Usar o playground do typescript para fazer os testes
  • #55: A falta dessa inteligência nos deixa improdutivo em relação a entender o formato dos objetos Com o typescript o editor consegue entender o formato do objeto O desenvolvedor tem que informar o tipo Dar o ctrl + espaço e dar o auto complete
  • #56: A falta dessa inteligência nos deixa improdutivo em relação a entender o formato dos objetos Com o typescript o editor consegue entender o formato do objeto O desenvolvedor tem que informar o tipo Dar o ctrl + espaço e dar o auto complete
  • #57: Se você não sabe as vantagens ou nunca usou o typescript. Alguns mitos e verdades para voc~e tomar decisão de usar ou não typescritp Verdade: No início do código vai diminuir a produtividade por que você vai ter que adicionar as regras de tipagem. Por que no início vai colcar algumas regras. E você não esta acostumado Mas depois de tipado. Vai aumentar em dobro a produtividade Pois vai dar a intligense. Auto complete Diminuirá erros futuros quando for para produção Mito. Por que só vamos adicionar tipagem em momentos onde o editor precisa saber o formato do objeto. Não há necessidade de tipar todo o código como java ou c# que todas variáveis tem que ser tipado. Vamos colocar tipagem somente qd o editor não entende o tipo Mito: o mercado está virando para utilizar o typescript Manutenalidade e softwares mais robustos e escalibilidade Mito: pois é baseado no javascript, logo, se o javascript mudar o typescript mudará. Verdade: sim pq nunca mexeu com typescript, mas depois trará uma curva bem maior de benifício Por que dará ao editor uma inteligência para ajudar o desenvolvedor a saber o formato dos objetos
  • #58: Nessa aula vamos entender, na prática, o que são os arquivos de tipagem e como eles ajudam a IDE a fazer o auto-complete. Além de como esses auto-completes funcionam com algumas dependências mesmo em JavaScript sem que você adicione esses arquivos de tipagem. Veremos também que existem algumas peculiaridades na hora de rodar o seu código em ambiente de desenvolvimento, visto que o NodeJS não entende TypeScript nativamente. Para isso, será necessário que você transpile o código para JavaScript em tempo de execução. Esse e mais detalhes serão mostrados na aula. A dependência em desenvolvimento Por que nosso typescript vai ser transformado em javascript em ambiente de produção Projeto typescritp faz com o nodejs já entenda algumas features como o import. Sem o webpack tsconfig.json Arquivo de configuração para o nodejs pode transpilar typescript em javascript
  • #59: Essa parte foi ´somente para entendermos a configuração do typescript Colocamos um diretório para ficar os arquivos gerados em .js Vai seguir a mesma estrutura dos arquivos .ts Fazer um teste de tipagem com o express. Depois tipar com a instalação do arquivo de declaração de tipos do express
  • #60: O TypeScript nos ajuda a identificar cada tipo de variável ao invocá-las. usa
  • #61: Mas devemos tomar um certo cuidado com essa tipagem que ela pode ser perigosa ao decorrer do nosso projeto, não é muito recomendada a sua utilização. Posso passar qualquer valor
  • #63: Essa parte foi ´somente para entendermos a configuração do typescript Colocamos um diretório para ficar os arquivos gerados em .js Vai seguir a mesma estrutura dos arquivos .ts Fazer um teste de tipagem com o express. Depois tipar com a instalação do arquivo de declaração de tipos do express
  • #64: Essa parte foi ´somente para entendermos a configuração do typescript Colocamos um diretório para ficar os arquivos gerados em .js Vai seguir a mesma estrutura dos arquivos .ts Fazer um teste de tipagem com o express. Depois tipar com a instalação do arquivo de declaração de tipos do express
  • #65: Quando declaramos do tipo void Não pode receber o comando return
  • #68: Deixa a tipagem mais flexível que o union A partir do momento que declaro o tipo. Tem que respeitar esse tipo. Usamos generics muito no react e react native
  • #69: Deixa a tipagem mais flexível que o union A partir do momento que declaro o tipo. Tem que respeitar esse tipo. Usamos generics muito no react e react native
  • #70: Reaproveitar tipos em lugares diferentes
  • #71: Fazendo a asserção o TypeScript reconhecerá o que tem disponível dentro daquele objeto. Muito utilizado para consumir API As API devolve e o typescript não sabe o tipo
  • #75: Usar o | só quando os objetos possuem a mesma propriedade de tipos diferentes
  • #76: Outra maneira de criar tipagens no TypeScript é utilizando a interface
  • #77: Resumindo. Muito pessoa a escolha. Cumprem o mesmo propósito.
  • #79: Essa parte foi ´somente para entendermos a configuração do typescript Colocamos um diretório para ficar os arquivos gerados em .js Vai seguir a mesma estrutura dos arquivos .ts Fazer um teste de tipagem com o express. Depois tipar com a instalação do arquivo de declaração de tipos do express
  • #80: Essa parte foi ´somente para entendermos a configuração do typescript Colocamos um diretório para ficar os arquivos gerados em .js Vai seguir a mesma estrutura dos arquivos .ts Fazer um teste de tipagem com o express. Depois tipar com a instalação do arquivo de declaração de tipos do express
  • #81: Instalando o TypeScript no projeto: npm install --typescript --save-dev
  • #84: Essa parte foi ´somente para entendermos a configuração do typescript Colocamos um diretório para ficar os arquivos gerados em .js Vai seguir a mesma estrutura dos arquivos .ts Fazer um teste de tipagem com o express. Depois tipar com a instalação do arquivo de declaração de tipos do express
  • #85: Essa parte foi ´somente para entendermos a configuração do typescript Colocamos um diretório para ficar os arquivos gerados em .js Vai seguir a mesma estrutura dos arquivos .ts Fazer um teste de tipagem com o express. Depois tipar com a instalação do arquivo de declaração de tipos do express
  • #86: Nessa aula iremos entender melhor quando adicionar ou não adicionar tipagem e o porquê de em alguns casos não ser mostrado nenhum erro, mesmo quando não tipamos algo. Por que colocamos o arquivo de definição de tipos Quando clicamos em cima de express iremos para o arquivo de definição de tipagem do express somente arquivo de definição de tipos. Não tem regras de negócios Arquivo gerado pelo typescript. Não foi um usuário que definiu. Não precisa entender esse arquivo Veremos, na prática, casos de uso onde você deve ou não definir tipos nas suas aplicações, como trabalhar com a mesma tipagem de dependências em arquivos separados além de te mostrar um leque de possibilidades nesse novo mundo do TypeScript.
  • #87: Se neste exemplo quisermos fazer um arquivo, por exemplo routes.ts, exportando os métodos que serão usados no index.ts Neste exemplo o vs code não entende o contexto de request e response Pq dentro do contexto deste arquivo não existe o express Mas só importar o express não vai resolver, pois é necessário usar o express É necessário buscar os tipos do express e adicionar nos parâmetros
  • #88: Agora que aprendemos usar as tipagens das dependências que instalamos, vamos aprender as nossas tipagens com isso fazer com que o IntelliSense da IDE nos auxilie da mesma forma como auxilia nos tipos que baixamos através do @types. Vamos criar uma pasta services e adicionar o método createUser() No exemplo ao observar não conseguimos de forma automática tipar pelo vs code os parâmetros Existem várias formas de setar os tipos desses parâmetros Atribuindo valores defaultas que o Vs code vai enteder que o tipo do valor vai ser do parâmetro Posso colocar : TipoPrimitivo (string,number,object,...) Ou criar nossos tipos
  • #89: No exemplo ao observar não conseguimos de forma automática tipar pelo vs code os parâmetros Existem várias formas de setar os tipos desses parâmetros Atribuindo valores defaultas que o Vs code vai enteder que o tipo do valor vai ser do parâmetro Posso colocar : TipoPrimitivo (string,number,object,...) Ou criar nossos tipos Se importarmos esse método em outro arquivo e não passarmos os parâmetros ou passarmos valores com tipos diferentes dos parâmetros O vscode vai nos avisar de erros que precisa de parâmetros ou tipo diferente Se fosse feito .js não iria nos avisar
  • #90: Quando temos uma função que recebe muitos parâmetros é interessante fazer uma interface Criar as tipagens em uma variável separada Uso da interface É como a gente define os tipos de um conjunto de informações, geralmente um objeto Tipo opcional usa o ? E quando importar esse método em outro arquivo só vai receber um argumento e vai nos dizer quais são pelo o IntelliSense da IDE No exemplo se criarmos o usuário com o método ele retorna um usuário e podemos acessar com o user as propriedades Por meio do auto-complete. Vai dizer até o tipo
  • #91: Quando queremos tipar vetores existes duas formas: Quando os valores dentro do array são vários tipos Array<formato> string, number,...objeto,array O array tem vários tipos dentro Criamos outras interfaces para cada tipo, se for objeto e separar pela barra vertical Array<string | Iobjeto | number | boolean> Quando os valores dentro do array são somente um tipo Tipo[] string[], boolean[], number[], objeto[] neste caso cria a interface deste objeto