II. Angular 4 Openwebinars

De wikijoan
Salta a la navegació Salta a la cerca

Typescript part I

¿Por qué usar typescript?

Aunque sea un lenguaje nuevo (y eso implica tener que aprenderlo) es muy fácil entenderlo porque:

  • Soporta todas las características de Ecmascript 2015
  • Encaja muy bien con la filosofía de Angular (de detectar fallos en compilación)
  • Nos permite usar anotaciones (también llamados decoradores) para configurar un componente.
  • Es un subconjunto de Ecmascript 2015 (ES6) con dos diferencias grandes: tipos y anotaciones.

Características de ES2016

Template literals

  • Multilínea
  • Interpolación con sintaxis ${variable}
    • Se evalúa cuando se define la cadena, no de forma dinámica como angular
  • Permiten parseo de cada parte de la cadena, tagged template literals

let/const

  • Reemplazo a var para declarar variables
  • Scope restringido al bloque
      for (var i = 0; i < 10; i++) {
          // algo
      }
      console.log(i) // 10!

      for (let j = 0; j < 10; j++) {
          // algo
      }
      console.log(j) // j is not defined
  • Sin hoisting, no podemos usar una variable antes de definirla
  • Binding en cada iteración, nos permite crear funciones en bucles que utilicen variables dentro del for.

Arrow functions

  • Funciones expresadas de forma compactas
  increment = function(x) {
        return x+1
  };

  increment = x => x+1;
  • Con retorno implícito si sólo tienen 1 expresión (no hace falta el return ni las llaves)
  • No hace faltan los paréntesis en los parámetros si sólo tienen 1 (sino () => 1 o (a,b)=>a+b)
  • No bindean this, por lo que es más fácil definir event handlers en el DOM.

for ... of

  • Iteración mejorada (no recorre propiedades padre como for in)
  • Funciona con todos los iterables (como strings)
  • Combinable con destructuring

Sintaxis corta de objetos

Forma breve de definir objetos que usar como nombre de la variable el nombre de la propiedad.

    let name = 'nhpatt';
    obj = {name: name} // antigua forma
    obj = {name} // nueva forma

Rest y spread

Operadores (diferentes!) con la misma sintaxis: ... (3 puntos seguidos)

Spread sirve para extraer valores de un array o un objeto:

    log(...[1, 2, 3]); // uso de spread operator

    function log(a, b, c) {
        console.log(`first value is ${a}, second is ${b} and third ${c}`)
    };

Rest para la operación inversa, de elementos a array:

    log(1, 2, 3); // uso de rest operator

    function log(... array) {
        console.log(array) // array [1, 2, 3]
    };

Valores por defecto

En parámetros de una función

    function ejemplo(valor = 1) {

    }

Typescript part II

Destructuring

Descomponer arrays y objetos a variables

let arr = [0, 1, 2];

let [a, b, c] = arr;

console.log(a, b, c) // 0, 1, 2

Se puede combinar con valores por defecto y operador rest.

let arr = [0, 1, 2];

let [a, ...b] = arr;

console.log(a, b) // 0, [1, 2]


let [a, b, c, d = 3] = arr;

console.log(a, b, c, d) // 0, 1, 2, 3

También podemos usarlo para invertir variables

let a = 0;
let b = 1;

[b, a] = [a, b];

console.log(a, b) // 1, 0

O para transformar parámetros de entrada de funciones

let arr = [0, 1];

log(arr);

function log([a, b]) {
    console.log(a, b)
}

Más características de ES2015/ES6

  • Soporte para Maps & Sets
  • Soporte nativo de promesas
  • Async/await
  • Módulos

Clases

Azúcar sintáctico sobre la herencia prototípica con soporte de:

  • Herencia (extends)
  • Constructores (constructor() {})
  • Métodos de instancia (metodo() {})
  • Métodos estáticos (static metodo() {})
  • Overrides de métodos a hijos (super.metodo())
  • Llamadas a constructores padre (super())
class AppComponent {

 atributo;

 metodo() {
 }

 constructor() { }
}

Typescript part III

Diferencias de Typescript

  • Tipos
  • Interfaces
  • Visibilidad
  • Decoradores
  • Sólo 1 constructor
  • Constructores breves

Tipos

Els tuipus són:

  • boolean, number, string, arrays, enum (enumerados), Any (cualquiera), Void (ninguno), Object
let cadena: string;
cadena = 'Hola';
cadena = 2: // ERROR!
  • Con tipado gradual. Podemos no escribir un tipo y el compilador intentará inferirlo y hacer comprobaciones en tiempo compilación.
  • Tipo any para saltarse las comprobaciones de tipos.
  • La sintaxis en arrays es
let array1: Array<number>;
let array2: number[];
==Interfaces==
No generan código en producción, sólo son comprobaciones en tiempo de ejecución
<pre>
interface Talk {
    name: String;
}

let charla = {name: 'Rx'}; //implementación implícita

class MyTalk implements Talk {
    name = 'Rx';
}

let charla2 = new MyTalk(); //implementación explícita

Visibilidad

Public por defecto.

Constructores breves

constructor(public name = 'Rx') {}

Equivale a definir un atributo y fijar su valor:

name;

constructor(name = 'Rx') {
 this.name = name;
}

Operador Elvis (NO es de Typescript, es sintaxis de templates de Angular)

Previene errores al recorrer un objeto con valores nulos

{{objeto?.propiedad?.valor}}

Typescript part IV

  • Tipos unión North | East;
  • Tipos función en interfaces
  • Generics y constraints
  • Mixins y merging

Novedades en Typescript 2.1, 2.2 y 2.3

  • Object Spread y Rest
  • Iteradores asíncronos
  • Mejoras en mixins
  • Tipo Object
  • new.target
  • Valores por defecto en genéricos
  • -strict flag

creat per Joan Quintana Compte, març 2019