typescript - olhe teu tipo, script slides
TRANSCRIPT
Olhe teu Tipo, Script
Superset
Instalação
npm install -g typescript
Tipos
var idade = 14;idade = 'Novinha';
Tipos - Erro
tsc ex01ex01.ts(2,1): error TS2323: Type 'string' is not assignable to type 'number'.
Tiposvar idade: number;
var list:number[] = [1, 2, 3];var list:Array<number> = [1, 2, 3];
Tipos - Autocomplete
function oi() {return "Oi";
}
Tipos - Parâmetros
function somar(a: number, b: number) {
return a + b;}
Tipos - Parâmetros compilado
function somar(a, b) {return a + b;
}
Tipos - Funçãofunction testaDeMaior(idade : number) : boolean { if(idade >= 18)
return true; return false;}
ENUMenum States {
New,Active,Disabled
}
console.log(States.Active);// 1console.log(States[States.Disabled]);// Disabled
ENUM - Compiladovar States;(function (States) {
States[States["New"] = 0] = "New";States[States["Active"] = 1] = "Active";States[States["Disabled"] = 2] = "Disabled";
})(States || (States = {}));console.log(1 /* Active */);// 1console.log(States[2 /* Disabled */]);
Tipos - Interfaceinterface Beer {
name: string;price: number;alcohol: number;description: string;
};
Interfacevar Kaiser: Beer = { name: "foo"
, price: 3, alcohol: 4
};
Interface Errointerface.ts(8,5): error TS2322: Type '{ name: string; price: number; alcohol: number; }' is not assignable to type 'Beer':Property 'description' is missing in type '{ name: string; price: number; alcohol: number; }'.
Interface - Atributo Opcionalinterface Beer {
name: string;price: number;alcohol: number;description?: string;
};
Interface - Extendsinterface Programador {
linguagem: string;tempoProgramador: number;
}
interface Professor {curso: string;
}
interface Suissa extends Programador, Professor {sideLength: number;
}
Interface - Extendsvar Jean = <Suissa>{};Jean.linguagem = "Javascript";Jean.tempoProgramador = 10;Jean.curso = 'Be MEAN';
Arrow Functionvar SabeOQueElaQuer = () => { return 'PAUUUUU' };
/* Compila paravar SabeOQueElaQuer = function () {
return 'PAUUUUU'};*/
Classesclass Professor {
fullname : string;constructor(public firstname, public lastname) {
this.fullname = firstname + " " + lastname;}
}interface Person {
firstname: string;lastname: string;
}var user = new Professor("Jean", "Nascimento");
Classes - implementsinterface StringValidator {
isAcceptable(s: string): boolean;}
var letrasRegex = /^[A-Za-z]+$/;var numerosRegex = /^[0-9]+$/;
Classes - implementsclass ApenasLetras implements StringValidator {
isAcceptable(s: string) {return letrasRegex.test(s);
}}
class CEPValidator implements StringValidator {isAcceptable(s: string) {
return s.length === 8 && numerosRegex.test(s);}
}
Classes - implementsvar strings = ['Suissa', '85010300', '101'];var validadores: { [s: string]: StringValidator; } = {};validadores['CEP'] = new CEPValidator();validadores['Apenas letras'] = new ApenasLetras();
strings.forEach(s => {for (var nome in validadores) {
console.log('"' + s + '" ' + (validadores[nome].isAcceptable(s) ? ' corresponde ' : ' não corresponde ') + nome);}
});
Modulesmodule Namespace {
export class Classe {quer = 'PAU'
}}
var SabeOQueEla = new Namespace.Classe;console.log(SabeOQueEla.quer);// PAU