SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
Dicas e Truques
Loiane Groner
@loiane
Loiane Groner
@loiane
loiane.com
github.com/loiane
youtube.com/loianegroner
Engenheira de Software
Agenda
@loiane
·Dicas:
· Melhorar nosso código através de boas práticas com TS
· Dicas para evitar verbosidade
· JS não ser verboso ao ser migrado
TypeScript?
Fortemente Tipado?
@loianehttps://twitter.com/ahejlsberg/status/792762247239995392?s=09
Superset JavaScript opcionalmente
tipado que compila para JavaScript
"puro"
@loiane
typescriptlang.org
Show me the
VSCode!
Use inferência de
tipos
Evite verbosidade com inferência de tipos
@loiane
const meuNome: string = 'Maria';
const minhaIdade: number = 20;
const eValido: boolean = true;
const hoje: Date = new Date();
const meuNome2 = 'Maria'; // melhor assim
const minhaIdade2 = 20;
const eValido2 = true;
const hoje2 = new Date();
let titulo: string;
// logica adicional aqui
titulo = 'TypeScript' // vai garantir que outro tipo não seja atribuido
Prefira tipos
primitivos ao
declarar variáveis
Tipo do TS x interface do JS
@loiane
let nome1: String;
let nome2: string; // prefira esse
nome1 = 'nome1';
// nome2 = nome1;
let num1: Number;
let num2: number; // prefira esse
let flag1: Boolean;
let flag2: boolean; // prefira esse
let lista1: Array<number>;
let lista2: number[]; // pessoalmente prefiro esse
Prefira interfaces
ao tipar variáveis
Interface x Class para tipagem
@loiane
interface Pessoa {
nome: string;
idade: number;
}
const maria: Pessoa = {nome: 'Maria', idade: 20};
---
class Pessoa {
constructor(public nome: string, public idade: number){}
}
const maria2: Pessoa = {nome: 'Maria', idade: 20};
Declare tipos
mesmo sem
interfaces
Tipando quando necessário
@loiane
function contarCharNome1(obj: any) {
return obj.nome.length;
}
function contarCharNome(obj: {nome: string}) {
return obj.nome.length;
}
const pessoa = { nome: 'Maria', idade: 20 };
const pet = { nome: 'Rex', raca: 'pug' };
console.log(contarCharNome(pessoa));
console.log(contarCharNome(pet));
Crie interfaces
para representar
JSON
@loiane
Links Utilitiários
@loiane
·http://www.json2ts.com
·http://www.jsontots.com
·
Evite any, prefira
unknown
Unknown: tipagem segura em relação ao any
let resultado: unknown;
resultado = {
nome: 'Maria',
idade: 20
};
function contarCharNome3(obj: any) {
return obj.nome.length;
}
function contarCharNome2(obj: unknown) {
// return obj.nome.length;
}
Evite any, prefira
allowJS ao
migrar para TS
allowJS: true
@loiane
Todo código JavaScript é um código TypeScript válido
JS em projeto TS!
Visual Studio
Code
Verificação em arquivos JS automaticamente
@loiane
Verificação em arquivos JS automaticamente: Global VSCode
@loiane
Enum x
const assertion
Enum
@loiane
enum HttpStatus {
OK = 200,
CREATED = 201,
FORBIDDEN = 403,
NOT_FOUND = 404,
INTERNAL_SERVER_ERROR = 500
}
const errorCode: HttpStatus = HttpStatus.NOT_FOUND;
Const assertion!
@loiane
// alternativa para evitar valores mágicos
const statusHttp = {
OK: 200,
CREATED: 201,
FORBIDDEN: 403,
NOT_FOUND: 404,
INTERNAL_SERVER_ERROR: 500
} as const;
if (errorCode === statusHttp.NOT_FOUND) {
console.error('Erro');
}
Estrutura de
dados com
Generics
Use Generics
@loiane
const dicionario = new Map<string, number>();
dicionario.set('typescript', 25);
dicionario.set('javascript', 25);
// dicionario.set(1, {nome: 'typeScript'});
Guardas de tipos
Type Guards
@loiane
class Animal {
desc: string;
}
class Estimacao extends Animal {
nome: string;
getCorColeira() { }
}
function eDeEstimacao(animal: Animal): animal is Estimacao {
return animal instanceof Estimacao;
}
function imprimeColeiraPet2(animal: Animal) {
if (eDeEstimacao(animal)) {
console.log(animal.getCorColeira());
}
}
Tipos Parciais
Tipos Parciais
@loiane
interface Contato {
nome: string;
idade: number;
}
type ContatoParcial = Partial<Contato>;
function atualizarPessoa(objAtualizar: Contato, atualizacoes: ContatoParcial) {
return { ... objAtualizar, ...atualizacoes };
}
Adote flags
tsConfig
gradativamente
Flags mais avançadas
@loiane
Angular v9: Ivy
@loiane
● fullTemplateTypeCheck (ngIf, ngFor)
● strictTemplates: ajuda a achar bugs que você não sabia
que existiam!
https://angular.io/guide/template-typecheck
Links + Referências
@loiane
Código Fonte
TypeScript
Ebook TypeScript Grátis
TS Extension Pack
github.com/loiane/typescript-tips
http://bit.ly/typescriptlang
http://bit.ly/snippet-creator
http://bit.ly/ts-extension-pack
Final point
A one-line description of it
Obrigada!

Mais conteúdo relacionado

Mais procurados

Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasRodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasRodrigo Branas
 
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno RochaiMasters
 
Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Webgoal
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09Carlos Santos
 
Apresentação Clojurescript
Apresentação ClojurescriptApresentação Clojurescript
Apresentação ClojurescriptBruno Fidelis
 

Mais procurados (20)

Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Ionic 3
Ionic 3Ionic 3
Ionic 3
 
Conciex 2012
Conciex 2012Conciex 2012
Conciex 2012
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 
Clean Code
Clean CodeClean Code
Clean Code
 
Tutorial Dwr - Combos Dependentes
Tutorial Dwr - Combos DependentesTutorial Dwr - Combos Dependentes
Tutorial Dwr - Combos Dependentes
 
Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho
 
Apresentacao TCC - Rafael Felix
Apresentacao TCC - Rafael FelixApresentacao TCC - Rafael Felix
Apresentacao TCC - Rafael Felix
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Nossa experiência com TDD
Nossa experiência com TDDNossa experiência com TDD
Nossa experiência com TDD
 
Java script aula 05 - funções
Java script   aula 05 - funçõesJava script   aula 05 - funções
Java script aula 05 - funções
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
Apresentação Clojurescript
Apresentação ClojurescriptApresentação Clojurescript
Apresentação Clojurescript
 

Semelhante a Dicas e truques para TypeScript

Semelhante a Dicas e truques para TypeScript (20)

Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Ágil na Prática - Ruby
Ágil na Prática - RubyÁgil na Prática - Ruby
Ágil na Prática - Ruby
 
Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25
 
Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Groovy
GroovyGroovy
Groovy
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Um Mundo Java Sem XML
Um Mundo Java Sem XMLUm Mundo Java Sem XML
Um Mundo Java Sem XML
 
Desenvolvimento de web sites com php
Desenvolvimento de web sites com phpDesenvolvimento de web sites com php
Desenvolvimento de web sites com php
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Java
JavaJava
Java
 
Java - Aula 08
Java - Aula 08Java - Aula 08
Java - Aula 08
 
Strings em php
Strings em phpStrings em php
Strings em php
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 

Dicas e truques para TypeScript