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