Funciones

Este tipo de función hace referencia al objeto que llama a esta función

 setTimeOut(function(){

     console.log(this); // Elemento Que llama a la función

 }, 2000);

Este tipo de funciones, lo que hacen es que el this no hace referencia al padre sino al objeto que contiene la función

 setTimeOut(() => {

     console.log(this);// Elemento que contiene esta función

 },2000);

Ejemplos sobre como evitar el tipo Any y filtrar solo por los tipos de datos que necesitamos

    // para poder definir tipos utilizaremos el O lógico

        function padLeft(value: string, padding: string | number) {

             if(typeof padding === "number"){
                 return Array(padding + 1).join(" ") + value;
             }

             if(typeof padding === "string") {
                 return Array(padding.length + 1).join(" ") + value;
             }

             // Si existiera Any tendriamos que controlar la excepción
             // Como buenas practicas y ya que este código al fin y al cabo
             // será javascript y es vulnerable a inyeción siempre está bien
             // realizar el control de las posibles excepciones
             throw new Error(`Expected String or number, got '${padding}' `);

    }

    console.log(padLeft("hello", "aaa")); // Ejemplo de función con texto -> Funciona
    console.log(padLeft("hello", 5)); // Ejemplo de función con número -> Funciona
    console.log(padLeft("hello", true)); // Ejemplo de función con texto -> NO FUNCIONA (no compila)

TypeScript admite que se declaren parametros opcionales de la siguiente forma utilizando la ?:

// Compiled with --strictNullChecks
function validateEntity(e: Entity?) {
    // Throw exception if e is null or invalid entity
}

function processEntity(e: Entity?) {
    validateEntity(e);
    let s = e!.name;  // Assert that e is non-null and access name
}

Igualación de funciones

En javascript las funciones pueden ser igualadas, TypeScript junto con su nueva sintáxis también permite este comportamiento como por ejemplo, utilizando las fat arrow:

let x = (a: number) => 0;
let y = (b: number, s: string) => 0;

y = x; // OK
x = y; // Error
let x = () => ({name: 'Alice'});
let y = () => ({name: 'Alice', location: 'Seattle'});

x = y; // OK
y = x; // Error porque x()nmo tiene la propiedad location

results matching ""

    No results matching ""