SlideShare una empresa de Scribd logo
1 de 69
Descargar para leer sin conexión
Except where otherwise noted, this work is licensed under:
http://creativecommons.org/licenses/by-nc-sa/3.0/
TypeScript para
Javeros
Cómo programar web
front-end y sentirse
como en casa
Leganés, 11 y 12 de
febrero
Micael Gallego
¿Quién soy?
developer
¿Quién soy?
developer
¿Quién soy?
developer
Características
● Imperativo
● Funcional (expresiones lambda)
● Recolector de basura
● Tipos estáticos
● Orientado a objetos (con clases)
● Modularidad con paquetes
Funcional
expresiones lambda
Java 8
streams
Orientado a objetos
Tipado estático
Errores en tiempo de compilación
Tipado estático
Autocompletar
Tipado estático
Refactorizaciones automatizadas
Tipado estático
Documentación integrada en el IDE
¿Web front-end?
ES5
Características
● Imperativo
● Funcional
● Recolector de basura
● Tipos dinámicos
● Orientado a objetos (con prototipos)
● Sin modularidad
ES5
Tipos dinámicos
● El compilador no te ayuda
● Hay que ejecutar los tests (si tienes)
● El IDE tampoco te ayuda
● No se puede refactorizar de forma automática
● El autocompletar es muy limitado
● La documentación integrada sólo aparece en
casos muy evidentes
● No se puede navegar a la implementación
ES5
Orientado a objetos
con prototipos
● Existen 3 formas diferentes de implementar
“clases”
● Prototipos “a mano”
● Simulación de clases con librerías
● Patrón módulo usando clousures
● Los patrones de diseño OO no se pueden
aplicar directamente
ES5
Sin modularidad
● Para independizar código tienes que usar
patrones basados en funciones
ES5
(function() {
var variableTemporal = "a";
//Otro código…
}());
Immediately-Invoked Function Expression (IIFE)
¿Java en front-end?
Características
● Framework de desarrollo de aplicaciones web
AJAX / SPA
● El back-end y front-end se desarrollan en Java
● En sus primeras versiones tenía muchos
inconvenientes
● Pesado. Mucho tiempo de compilación
● Sistema de componentes propio (no bootstrap)
● Protocolo de comunicación propio
Características
● La versión 2.8 ha mejorado mucho
● JsInterop: Permite integrar fácilmente código Java y
JavaScript
● Se soporta Java 8 (expresiones lambda)
package com.acme;
@JsType
class Foo {
public int x;
public int y;
public int sum() {
return x + y;
}
}
Java
var foo = new com.acme.Foo();
foo.x = 40;
foo.y = 2;
foo.sum(); JS
Características
● No lo considero una tecnología de front-end
genérica
● Lo usaría solo para portar código Java existente a
front-end con poco coste
https://news.ycombinator.com/item?id=8554339
¿Tipos estáticos y
POO con clases
en front-end?
Características
● Añade tipos estáticos a JavaScript ES6
● Inferencia de tipos
● Tipos opcionales
● El compilador genera código JavaScript ES5
(compatible con los navegadores web actuales)
● Orientado a Objetos con clases (no como ES5)
● Anotaciones (ES7)
http://www.typescriptlang.org/
Características
● Mejoras debidas a JavaScript ES6 (ES2015)
● Orientación a Objetos con clases
● Arrow functions con captura de this
● Let
● Estructuras de datos
● Módulos
● Mejoras debidas a JavaScript ES7
● Anotaciones
● Async / await
Ventajas frente a JavaScript
● Con el tipado estático el compilador puede verificar
la corrección de muchas más cosas que con el
tipado dinámico
● Los programas grandes son menos propensos a
errores
● Los IDEs y editores pueden: Autocompletar,
Refactorizar, Navegar a la definición
● Muy parecido a Java y C#
Facilidad de adopción para JavaScripters
● Los tipos son opcionales
● La inferencia de tipos permite no tener que
escribir los tipos constantemente
● En realidad es JavaScript con más cosas, así que
todo lo conocido se puede aplicar
● Un mismo proyecto puede combinar JS yTS, lo
que facilita migrar un proyecto existente
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
TypeScript
Orientación a Objetos
TypeScript vs JavaScript ES5
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
Clase enTypeScript
function Empleado(nombre, salario){
this.nombre = nombre;
this.salario = salario;
}
Empleado.prototype.getNombre = function(){
return nombre;
};
Empleado.prototype.toString = function(){
return "Nombre:"+this.nombre+",
Salario:"+this.salario;
};
Simulación de clase en JS ES5 con prototipos
public class Empleado {
private String nombre;
private double salario;
public Empleado(String nombre,
double salario){
this.nombre = nombre;
this.salario = salario;
}
public String getNombre(){
return nombre;
}
public String toString(){
return "Nombre:"+nombre+
", Salario:"+salario;
}
}
Clase en Java
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
Clase enTypeScript
Orientación a Objetos
TypeScript vs Java
public class Empleado {
private String nombre;
private double salario;
public Empleado(String nombre,
double salario){
this.nombre = nombre;
this.salario = salario;
}
public String getNombre(){
return nombre;
}
public String toString(){
return "Nombre:"+nombre+
", Salario:"+salario;
}
}
Clase en Java
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
Clase enTypeScript
Orientación a Objetos
TypeScript vs Java
public class Empleado {
private String nombre;
private double salario;
public Empleado(String nombre,
double salario){
this.nombre = nombre;
this.salario = salario;
}
public String getNombre(){
return nombre;
}
public String toString(){
return "Nombre:"+nombre+
", Salario:"+salario;
}
}
Clase en Java
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
Clase enTypeScript
Orientación a Objetos
TypeScript vs Java
public class Empleado {
private String nombre;
private double salario;
public Empleado(String nombre,
double salario){
this.nombre = nombre;
this.salario = salario;
}
public String getNombre(){
return nombre;
}
public String toString(){
return "Nombre:"+nombre+
", Salario:"+salario;
}
}
Clase en Java
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
Clase enTypeScript
Orientación a Objetos
TypeScript vs Java
public class Empleado {
private String nombre;
private double salario;
public Empleado(String nombre,
double salario){
this.nombre = nombre;
this.salario = salario;
}
public String getNombre(){
return nombre;
}
public String toString(){
return "Nombre:"+nombre+
", Salario:"+salario;
}
}
Clase en Java
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
Clase enTypeScript
Orientación a Objetos
TypeScript vs Java
public class Empleado {
private String nombre;
private double salario;
public Empleado(String nombre,
double salario){
this.nombre = nombre;
this.salario = salario;
}
public String getNombre(){
return nombre;
}
public String toString(){
return "Nombre:"+nombre+
", Salario:"+salario;
}
}
Clase en Java
export class Empleado {
private nombre:string;
private salario:number;
constructor(nombre:string,
salario:number){
this.nombre = nombre;
this.salario = salario;
}
getNombre(){
return this.nombre;
}
toString(){
return "Nombre:"+this.nombre+
", Salario:"+this.salario;
}
}
Clase enTypeScript
Orientación a Objetos
TypeScript vs Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
Módulos /Variables / for / lambda
List<Empleado> emps = new ArrayList<>();
emps.add(new Empleado('Pepe', 500));
emps.add(new Empleado('Juan', 200));
for(Empleado emp : emps){
System.out.println(emp.getNombre());
}
empleados.forEach(emp -> {
System.out.println(emp);
});
Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
TypeScript
Módulos /Variables / for / lambda
List<Empleado> emps = new ArrayList<>();
emps.add(new Empleado('Pepe', 500));
emps.add(new Empleado('Juan', 200));
for(Empleado emp : emps){
System.out.println(emp.getNombre());
}
empleados.forEach(emp -> {
System.out.println(emp);
});
Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
TypeScript
En Java las clases de la misma carpeta se pueden usar sin importar.
EnTypeScript se tienen que importar porque cada fichero es un módulo distinto
Módulos /Variables / for / lambda
List<Empleado> emps = new ArrayList<>();
emps.add(new Empleado('Pepe', 500));
emps.add(new Empleado('Juan', 200));
for(Empleado emp : emps){
System.out.println(emp.getNombre());
}
empleados.forEach(emp -> {
System.out.println(emp);
});
Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
TypeScript
En Java usamos List y ArrayList del SDK.
EnTypeScript usamos el Array nativo de JavaScript
Módulos /Variables / for / lambda
List<Empleado> emps = new ArrayList<>();
emps.add(new Empleado('Pepe', 500));
emps.add(new Empleado('Juan', 200));
for(Empleado emp : emps){
System.out.println(emp.getNombre());
}
empleados.forEach(emp -> {
System.out.println(emp);
});
Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
TypeScript
En Java List el método es “add”
EnTypeScript Array el método es “push”
Módulos /Variables / for / lambda
List<Empleado> emps = new ArrayList<>();
emps.add(new Empleado('Pepe', 500));
emps.add(new Empleado('Juan', 200));
for(Empleado emp : emps){
System.out.println(emp.getNombre());
}
empleados.forEach(emp -> {
System.out.println(emp);
});
Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
TypeScript
Módulos /Variables / for / lambda
List<Empleado> emps = new ArrayList<>();
emps.add(new Empleado('Pepe', 500));
emps.add(new Empleado('Juan', 200));
for(Empleado emp : emps){
System.out.println(emp.getNombre());
}
empleados.forEach(emp -> {
System.out.println(emp);
});
Java
import { Empleado } from "./Empleado";
let emps = new Array<Empleado>();
emps.push(new Empleado('Pepe', 500));
emps.push(new Empleado('Juan', 200));
for(let emp of emps){
console.log(emp.getNombre());
}
empleados.forEach(emp => {
console.log(emp);
});
TypeScript
Módulos /Variables / for / lambda
Ventajas respecto a Java
Características que gustarán a los
desarrolladores Java porque simplifica
patrones comunes
interface SquareConfig {
color: string;
width?: number;
}
Ventajas respecto a Java
Objetos literales con verificación y sintaxis compacta
function createSquare(config: SquareConfig){
...
}
createSquare({color: "black"});
createSquare({color: "black", width: 20});
interface SquareConfig {
color: string;
width?: number;
}
Ventajas respecto a Java
Objetos literales con verificación y sintaxis compacta
function createSquare(config: SquareConfig){
...
}
createSquare({color: "black"});
createSquare({color: "black", width: 20});
class Animal {
private name:string;
constructor(name: string) {
this.name = name;
}
}
Ventajas respecto a Java
Sintaxis compacta de definición de “beans”
class Animal {
constructor(private name: string) {
}
}
class Animal {
private name:string;
constructor(name: string) {
this.name = name;
}
}
Ventajas respecto a Java
Sintaxis compacta de definición de “beans”
class Animal {
constructor(private name: string) {
}
}
class Animal { eat() { } }
class Dog extends Animal { woof() { } }
class Cat extends Animal { meow() { } }
var pet: Animal = undefined;
if (pet instanceof Dog) {
pet.woof();
} else if (pet instanceof Cat) {
pet.meow();
} else {
pet.eat();
}
Ventajas respecto a Java
Type guards Instanceof / typeof
class Animal { eat() { } }
class Dog extends Animal { woof() { } }
class Cat extends Animal { meow() { } }
var pet: Animal = undefined;
if (pet instanceof Dog) {
pet.woof();
} else if (pet instanceof Cat) {
pet.meow();
} else {
pet.eat();
}
Ventajas respecto a Java
Type guards Instanceof / typeof
Limitaciones respecto a Java
Cosas que los javeros echarán de menos
Limitaciones respecto a Java
● El código se ejecuta en una JavaScriptVM, se
aplican todas las limitaciones del mismo
● No hay números de 64 bits (ni long ni double)
● No hay concurrencia con memoria
compartida
● El control del recolector de basura no permite
implementar weak / soft references
Programación asíncrona
Simulación de sincronía con async / await
http://www.sitepoint.com/javascript-goes-asynchronous-awesome/
http://www.sitepoint.com/javascript-goes-asynchronous-awesome/
Editores / IDEs
Hay plugins para la mayoría de los editores / IDEs
SublimeText Visual Studio
Code
WebStorm
Editores / IDEs
Hay plugins para la mayoría de los editores / IDEs
SublimeText Visual Studio
Code
WebStorm
59
WebStorm 11
60
WebStorm 11
61
WebStorm 11
62
Atom / atom-typescript
https://atom.io/packages/atom-typescript
¿TypeScript se usa?
TypeScript
coffeescript
ES6
Angular 2
TypeScript es el lenguaje recomendado
Angular 2 recomienda
usarTypeScript
import {Component} from 'angular2/core';
@Component({
selector: 'app',
templateUrl: 'app.html'
})
export class AppComponent {
name = 'Anybody';
}
app.component.ts
<h1>Hello {{name}}!</h1>
app.html
Otros frameworks
soportan el uso deTypeScript
Incluso los editores online
TypeScript se puede transpilar a ES5
directamente en el propio browser
System.config({
  transpiler: 'typescript',
  typescriptOptions: {
    emitDecoratorMetadata: true
  },
  map: {
    app: "./src"
  },
  packages: {
    app: {
      main: './main.ts',
      defaultExtension: 'ts'
    }
  }
});
¿Preguntas?
Gracias...

Más contenido relacionado

La actualidad más candente

Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3
Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3
Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3I Putu Hariyadi
 
Konfigurasi Statik Routing pada Linux CentOS
Konfigurasi Statik Routing pada Linux CentOSKonfigurasi Statik Routing pada Linux CentOS
Konfigurasi Statik Routing pada Linux CentOSI Putu Hariyadi
 
Redes grupos de trabajo
Redes grupos de trabajoRedes grupos de trabajo
Redes grupos de trabajoginsteff
 
Alta disponibilidad con MySQL
Alta disponibilidad con MySQLAlta disponibilidad con MySQL
Alta disponibilidad con MySQLDennis Cohn
 
Mejores prácticas desarrollo de base de datos
Mejores prácticas desarrollo de base de datos Mejores prácticas desarrollo de base de datos
Mejores prácticas desarrollo de base de datos Eduardo Castro
 
Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...
Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...
Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...walidumar
 
Creando un servicio SOAP en Java con NetBeans
Creando un servicio SOAP en Java con NetBeansCreando un servicio SOAP en Java con NetBeans
Creando un servicio SOAP en Java con NetBeansDavid Fernández Puentes
 
SOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJ
SOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJSOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJ
SOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJSaeful Iman
 
Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10
Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10
Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10manafhsb
 
Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...
Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...
Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...I Putu Hariyadi
 
Tugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja Xpress
Tugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja XpressTugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja Xpress
Tugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja XpressDimasKamurapi
 
Jobsheet instalasi mikrotik
Jobsheet instalasi mikrotikJobsheet instalasi mikrotik
Jobsheet instalasi mikrotikwaskito
 
VLSM y CIDR (características, implementación torres gamarra
VLSM y CIDR (características, implementación torres gamarraVLSM y CIDR (características, implementación torres gamarra
VLSM y CIDR (características, implementación torres gamarracesartg65
 
Configuración Firewall - CISCO ASA 5510
Configuración Firewall - CISCO ASA 5510Configuración Firewall - CISCO ASA 5510
Configuración Firewall - CISCO ASA 5510Vanesa Rodríguez Percy
 
PRTG NETWORK MONITOR
PRTG NETWORK MONITORPRTG NETWORK MONITOR
PRTG NETWORK MONITORpedrooscar12
 
Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021
Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021
Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021I Putu Hariyadi
 

La actualidad más candente (20)

Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3
Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3
Konfigurasi Site-to-Site IPSec VPN Tunnel di Mikrotik menggunakan GNS3
 
Membuat database dan tabel melalui console mysql
Membuat database dan tabel melalui console mysqlMembuat database dan tabel melalui console mysql
Membuat database dan tabel melalui console mysql
 
Manejo de prtg network monitor
Manejo de prtg network monitorManejo de prtg network monitor
Manejo de prtg network monitor
 
Konfigurasi Statik Routing pada Linux CentOS
Konfigurasi Statik Routing pada Linux CentOSKonfigurasi Statik Routing pada Linux CentOS
Konfigurasi Statik Routing pada Linux CentOS
 
Redes grupos de trabajo
Redes grupos de trabajoRedes grupos de trabajo
Redes grupos de trabajo
 
Foxpro
FoxproFoxpro
Foxpro
 
Alta disponibilidad con MySQL
Alta disponibilidad con MySQLAlta disponibilidad con MySQL
Alta disponibilidad con MySQL
 
Mejores prácticas desarrollo de base de datos
Mejores prácticas desarrollo de base de datos Mejores prácticas desarrollo de base de datos
Mejores prácticas desarrollo de base de datos
 
Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...
Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...
Soal Praktikum 16 - Rancang Bangun Jaringan "Konfigurasi Mikrotik sebagai Rep...
 
Creando un servicio SOAP en Java con NetBeans
Creando un servicio SOAP en Java con NetBeansCreando un servicio SOAP en Java con NetBeans
Creando un servicio SOAP en Java con NetBeans
 
SOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJ
SOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJSOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJ
SOAL UAS JARINGAN DASAR SEMESTER 1 KELAS X TKJ
 
Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10
Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10
Cara install apache, mysql, php, dan phpmyadmin pada freebsd 10
 
Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...
Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...
Pembahasan Solusi Perhitungan VLSM untuk Lab 11.10.1 Packet Tracer - Design a...
 
Tugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja Xpress
Tugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja XpressTugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja Xpress
Tugas 4- Proposal Penawaran - Sistem Ekspedisi Ninja Xpress
 
Jobsheet instalasi mikrotik
Jobsheet instalasi mikrotikJobsheet instalasi mikrotik
Jobsheet instalasi mikrotik
 
VLSM y CIDR (características, implementación torres gamarra
VLSM y CIDR (características, implementación torres gamarraVLSM y CIDR (características, implementación torres gamarra
VLSM y CIDR (características, implementación torres gamarra
 
Configuración Firewall - CISCO ASA 5510
Configuración Firewall - CISCO ASA 5510Configuración Firewall - CISCO ASA 5510
Configuración Firewall - CISCO ASA 5510
 
PRTG NETWORK MONITOR
PRTG NETWORK MONITORPRTG NETWORK MONITOR
PRTG NETWORK MONITOR
 
Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021
Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021
Soal Linux Actual - ITNSA LKS SMK Tingkat Provinsi NTB 2021
 
Proyecto red lab
Proyecto red labProyecto red lab
Proyecto red lab
 

Destacado

WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015Micael Gallego
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicMicael Gallego
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016Micael Gallego
 
Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)
Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)
Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)Micael Gallego
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2Micael Gallego
 
La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)Micael Gallego
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorMicael Gallego
 
La priorización de historias de usuario (versión reducida)
La priorización de historias de usuario (versión reducida)La priorización de historias de usuario (versión reducida)
La priorización de historias de usuario (versión reducida)Micael Gallego
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCMicael Gallego
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Micael Gallego
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Micael Gallego
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsMicael Gallego
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Micael Gallego
 

Destacado (15)

WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016
 
Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)
Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)
Tema 1: ¿Qué es la web? (Desarrollo Aplicaciones Web)
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2
 
La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesor
 
La priorización de historias de usuario (versión reducida)
La priorización de historias de usuario (versión reducida)La priorización de historias de usuario (versión reducida)
La priorización de historias de usuario (versión reducida)
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
 

Similar a TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa

JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxFamiliaAyluardo
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodosDanae Aguilar Guzmán
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2mellcv
 
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript David Ballén
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptRobert Moreira
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascriptguest030dc2
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubGlobalLogic Latinoamérica
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado JavascriptEl Jota
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones LambdasEudris Cabrera
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQueryDanae Aguilar Guzmán
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosJosé Antonio Sandoval Acosta
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Eudris Cabrera
 
Curso Swift
Curso SwiftCurso Swift
Curso SwiftPlatzi
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 

Similar a TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa (20)

JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascript
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 
P2C2 Introducción a JEE5
P2C2 Introducción a JEE5P2C2 Introducción a JEE5
P2C2 Introducción a JEE5
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Java
JavaJava
Java
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
 
Javascript C#
Javascript C#Javascript C#
Javascript C#
 
Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
2 f programas
2 f programas2 f programas
2 f programas
 
2 f programas
2 f programas2 f programas
2 f programas
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 

Más de Micael Gallego

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferenciasMicael Gallego
 
La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...Micael Gallego
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduMicael Gallego
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?Micael Gallego
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Micael Gallego
 
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...Micael Gallego
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestMicael Gallego
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosMicael Gallego
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 Micael Gallego
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas SoftwareMicael Gallego
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoMicael Gallego
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosMicael Gallego
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Micael Gallego
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesMicael Gallego
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesMicael Gallego
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...Micael Gallego
 

Más de Micael Gallego (19)

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020
 
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTest
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas Software
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigo
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornos
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
 

Último

Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Último (20)

Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa

  • 1. Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0/ TypeScript para Javeros Cómo programar web front-end y sentirse como en casa Leganés, 11 y 12 de febrero Micael Gallego
  • 5.
  • 6. Características ● Imperativo ● Funcional (expresiones lambda) ● Recolector de basura ● Tipos estáticos ● Orientado a objetos (con clases) ● Modularidad con paquetes
  • 9. Tipado estático Errores en tiempo de compilación
  • 13.
  • 15. ES5
  • 16. Características ● Imperativo ● Funcional ● Recolector de basura ● Tipos dinámicos ● Orientado a objetos (con prototipos) ● Sin modularidad ES5
  • 17. Tipos dinámicos ● El compilador no te ayuda ● Hay que ejecutar los tests (si tienes) ● El IDE tampoco te ayuda ● No se puede refactorizar de forma automática ● El autocompletar es muy limitado ● La documentación integrada sólo aparece en casos muy evidentes ● No se puede navegar a la implementación ES5
  • 18. Orientado a objetos con prototipos ● Existen 3 formas diferentes de implementar “clases” ● Prototipos “a mano” ● Simulación de clases con librerías ● Patrón módulo usando clousures ● Los patrones de diseño OO no se pueden aplicar directamente ES5
  • 19. Sin modularidad ● Para independizar código tienes que usar patrones basados en funciones ES5 (function() { var variableTemporal = "a"; //Otro código… }()); Immediately-Invoked Function Expression (IIFE)
  • 21.
  • 22. Características ● Framework de desarrollo de aplicaciones web AJAX / SPA ● El back-end y front-end se desarrollan en Java ● En sus primeras versiones tenía muchos inconvenientes ● Pesado. Mucho tiempo de compilación ● Sistema de componentes propio (no bootstrap) ● Protocolo de comunicación propio
  • 23. Características ● La versión 2.8 ha mejorado mucho ● JsInterop: Permite integrar fácilmente código Java y JavaScript ● Se soporta Java 8 (expresiones lambda) package com.acme; @JsType class Foo { public int x; public int y; public int sum() { return x + y; } } Java var foo = new com.acme.Foo(); foo.x = 40; foo.y = 2; foo.sum(); JS
  • 24. Características ● No lo considero una tecnología de front-end genérica ● Lo usaría solo para portar código Java existente a front-end con poco coste https://news.ycombinator.com/item?id=8554339
  • 25. ¿Tipos estáticos y POO con clases en front-end?
  • 26.
  • 27. Características ● Añade tipos estáticos a JavaScript ES6 ● Inferencia de tipos ● Tipos opcionales ● El compilador genera código JavaScript ES5 (compatible con los navegadores web actuales) ● Orientado a Objetos con clases (no como ES5) ● Anotaciones (ES7) http://www.typescriptlang.org/
  • 28. Características ● Mejoras debidas a JavaScript ES6 (ES2015) ● Orientación a Objetos con clases ● Arrow functions con captura de this ● Let ● Estructuras de datos ● Módulos ● Mejoras debidas a JavaScript ES7 ● Anotaciones ● Async / await
  • 29. Ventajas frente a JavaScript ● Con el tipado estático el compilador puede verificar la corrección de muchas más cosas que con el tipado dinámico ● Los programas grandes son menos propensos a errores ● Los IDEs y editores pueden: Autocompletar, Refactorizar, Navegar a la definición ● Muy parecido a Java y C#
  • 30. Facilidad de adopción para JavaScripters ● Los tipos son opcionales ● La inferencia de tipos permite no tener que escribir los tipos constantemente ● En realidad es JavaScript con más cosas, así que todo lo conocido se puede aplicar ● Un mismo proyecto puede combinar JS yTS, lo que facilita migrar un proyecto existente
  • 31. export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } TypeScript
  • 32. Orientación a Objetos TypeScript vs JavaScript ES5 export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } Clase enTypeScript function Empleado(nombre, salario){ this.nombre = nombre; this.salario = salario; } Empleado.prototype.getNombre = function(){ return nombre; }; Empleado.prototype.toString = function(){ return "Nombre:"+this.nombre+", Salario:"+this.salario; }; Simulación de clase en JS ES5 con prototipos
  • 33. public class Empleado { private String nombre; private double salario; public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; } public String getNombre(){ return nombre; } public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; } } Clase en Java export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } Clase enTypeScript Orientación a Objetos TypeScript vs Java
  • 34. public class Empleado { private String nombre; private double salario; public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; } public String getNombre(){ return nombre; } public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; } } Clase en Java export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } Clase enTypeScript Orientación a Objetos TypeScript vs Java
  • 35. public class Empleado { private String nombre; private double salario; public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; } public String getNombre(){ return nombre; } public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; } } Clase en Java export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } Clase enTypeScript Orientación a Objetos TypeScript vs Java
  • 36. public class Empleado { private String nombre; private double salario; public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; } public String getNombre(){ return nombre; } public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; } } Clase en Java export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } Clase enTypeScript Orientación a Objetos TypeScript vs Java
  • 37. public class Empleado { private String nombre; private double salario; public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; } public String getNombre(){ return nombre; } public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; } } Clase en Java export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } Clase enTypeScript Orientación a Objetos TypeScript vs Java
  • 38. public class Empleado { private String nombre; private double salario; public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; } public String getNombre(){ return nombre; } public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; } } Clase en Java export class Empleado { private nombre:string; private salario:number; constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; } getNombre(){ return this.nombre; } toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; } } Clase enTypeScript Orientación a Objetos TypeScript vs Java
  • 39. import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); Módulos /Variables / for / lambda
  • 40. List<Empleado> emps = new ArrayList<>(); emps.add(new Empleado('Pepe', 500)); emps.add(new Empleado('Juan', 200)); for(Empleado emp : emps){ System.out.println(emp.getNombre()); } empleados.forEach(emp -> { System.out.println(emp); }); Java import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); TypeScript Módulos /Variables / for / lambda
  • 41. List<Empleado> emps = new ArrayList<>(); emps.add(new Empleado('Pepe', 500)); emps.add(new Empleado('Juan', 200)); for(Empleado emp : emps){ System.out.println(emp.getNombre()); } empleados.forEach(emp -> { System.out.println(emp); }); Java import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); TypeScript En Java las clases de la misma carpeta se pueden usar sin importar. EnTypeScript se tienen que importar porque cada fichero es un módulo distinto Módulos /Variables / for / lambda
  • 42. List<Empleado> emps = new ArrayList<>(); emps.add(new Empleado('Pepe', 500)); emps.add(new Empleado('Juan', 200)); for(Empleado emp : emps){ System.out.println(emp.getNombre()); } empleados.forEach(emp -> { System.out.println(emp); }); Java import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); TypeScript En Java usamos List y ArrayList del SDK. EnTypeScript usamos el Array nativo de JavaScript Módulos /Variables / for / lambda
  • 43. List<Empleado> emps = new ArrayList<>(); emps.add(new Empleado('Pepe', 500)); emps.add(new Empleado('Juan', 200)); for(Empleado emp : emps){ System.out.println(emp.getNombre()); } empleados.forEach(emp -> { System.out.println(emp); }); Java import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); TypeScript En Java List el método es “add” EnTypeScript Array el método es “push” Módulos /Variables / for / lambda
  • 44. List<Empleado> emps = new ArrayList<>(); emps.add(new Empleado('Pepe', 500)); emps.add(new Empleado('Juan', 200)); for(Empleado emp : emps){ System.out.println(emp.getNombre()); } empleados.forEach(emp -> { System.out.println(emp); }); Java import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); TypeScript Módulos /Variables / for / lambda
  • 45. List<Empleado> emps = new ArrayList<>(); emps.add(new Empleado('Pepe', 500)); emps.add(new Empleado('Juan', 200)); for(Empleado emp : emps){ System.out.println(emp.getNombre()); } empleados.forEach(emp -> { System.out.println(emp); }); Java import { Empleado } from "./Empleado"; let emps = new Array<Empleado>(); emps.push(new Empleado('Pepe', 500)); emps.push(new Empleado('Juan', 200)); for(let emp of emps){ console.log(emp.getNombre()); } empleados.forEach(emp => { console.log(emp); }); TypeScript Módulos /Variables / for / lambda
  • 46. Ventajas respecto a Java Características que gustarán a los desarrolladores Java porque simplifica patrones comunes
  • 47. interface SquareConfig { color: string; width?: number; } Ventajas respecto a Java Objetos literales con verificación y sintaxis compacta function createSquare(config: SquareConfig){ ... } createSquare({color: "black"}); createSquare({color: "black", width: 20});
  • 48. interface SquareConfig { color: string; width?: number; } Ventajas respecto a Java Objetos literales con verificación y sintaxis compacta function createSquare(config: SquareConfig){ ... } createSquare({color: "black"}); createSquare({color: "black", width: 20});
  • 49. class Animal { private name:string; constructor(name: string) { this.name = name; } } Ventajas respecto a Java Sintaxis compacta de definición de “beans” class Animal { constructor(private name: string) { } }
  • 50. class Animal { private name:string; constructor(name: string) { this.name = name; } } Ventajas respecto a Java Sintaxis compacta de definición de “beans” class Animal { constructor(private name: string) { } }
  • 51. class Animal { eat() { } } class Dog extends Animal { woof() { } } class Cat extends Animal { meow() { } } var pet: Animal = undefined; if (pet instanceof Dog) { pet.woof(); } else if (pet instanceof Cat) { pet.meow(); } else { pet.eat(); } Ventajas respecto a Java Type guards Instanceof / typeof
  • 52. class Animal { eat() { } } class Dog extends Animal { woof() { } } class Cat extends Animal { meow() { } } var pet: Animal = undefined; if (pet instanceof Dog) { pet.woof(); } else if (pet instanceof Cat) { pet.meow(); } else { pet.eat(); } Ventajas respecto a Java Type guards Instanceof / typeof
  • 53. Limitaciones respecto a Java Cosas que los javeros echarán de menos
  • 54. Limitaciones respecto a Java ● El código se ejecuta en una JavaScriptVM, se aplican todas las limitaciones del mismo ● No hay números de 64 bits (ni long ni double) ● No hay concurrencia con memoria compartida ● El control del recolector de basura no permite implementar weak / soft references
  • 55. Programación asíncrona Simulación de sincronía con async / await http://www.sitepoint.com/javascript-goes-asynchronous-awesome/
  • 57. Editores / IDEs Hay plugins para la mayoría de los editores / IDEs SublimeText Visual Studio Code WebStorm
  • 58. Editores / IDEs Hay plugins para la mayoría de los editores / IDEs SublimeText Visual Studio Code WebStorm
  • 65. Angular 2 TypeScript es el lenguaje recomendado
  • 66. Angular 2 recomienda usarTypeScript import {Component} from 'angular2/core'; @Component({ selector: 'app', templateUrl: 'app.html' }) export class AppComponent { name = 'Anybody'; } app.component.ts <h1>Hello {{name}}!</h1> app.html
  • 67. Otros frameworks soportan el uso deTypeScript
  • 68. Incluso los editores online TypeScript se puede transpilar a ES5 directamente en el propio browser System.config({   transpiler: 'typescript',   typescriptOptions: {     emitDecoratorMetadata: true   },   map: {     app: "./src"   },   packages: {     app: {       main: './main.ts',       defaultExtension: 'ts'     }   } });