Manual TypeScript
Manual TypeScript
TypeScript
JavaScript maneja todo tipo de variables númericos, string, etc, pero no hay
manera de saber que tipo de dato contiene una variable hasta que se le asigna
el valor.
¡Lo peor de todos estos errores, es que no podemos detectarlos hasta que
ejecutamos el proyecto!
TypeScript
Es un super set de JavaScript, para comprender dicha magnitud centrémonos en lo
siguiente
- Maps y Set.
Como podemos ver hemos declarado una variable de tipo String, por lo que si
intentamos insertar un valor numérico posteriormente nos va a dar un error.
Aún así, TypeScript nos dirá que hay un error, pero nos dejará continuar, la
manera correcta de declarar una variable de tipo string u otro tipo, es indicándole que
tipo es como podemos ver a continuación:
Por lo tanto, una manera correcta es utilizar un template literal que podemos ver a
continuación:
Podemos ver que el espacio que hemos dejado se contempla. Simplemente lo que
realiza es una multilínea equivalente a “\n”.
También se puede llamada a funciones que devuelven un resultado para asignarlas a
una variable, como podemos ver a continuación:
Para ello utilizamos el template cuando llamamos a la función getNombre().
Parámetro por defecto, este parámetro cogerá el valor por defecto asignado en caso de
no enviar ningún dato en la llamada de la función.
Parámetro opcional, este parámetro se puede enviar o no, pero debemos tener en
cuenta, que si queremos enviarlo, en la siguiente imagen tenemos un parámetro por
defecto, si queremos informar el opcional, también debemos informar el por defecto,
ya que si solo enviamos 2 parámetros nada más y se nos olvida el por defecto, entonces
el valor por defecto tomará el valor de la variable día que queríamos enviar.
Jesús Rodríguez – Desarrollador Aplicaciones
Por ley, no podemos poner el valor opcional al principio y el valor obligatorio al final. Por
lo tanto, como buenas prácticas:
- Debemos siempre indicar los valores obligatorios al principio, y los opcionales al
final.
FUNCIONES DE FLECHA
Ejemplo función simple de flecha:
Como podemos ver, no tiene ninguna complicación ni parece que pueda causar
problemas, pero si a la función le realizamos un setTimeout, pasa lo siguiente:
- Esto es debido a que cuando se setea un setTimeout dentro de un objeto, el this
dentro del setTimeout apunta al objeto y en este caso es Windows debido a que
transcurrido ese tiempo ya ha salido de dicha función.
const { apellido2, nombre} = persona; Como vemos estamos obteniendo dos propiedades del
objeto persona y en ningún momento está siguiendo el orden en que están definidas.
Este tipo de desestructuración también funciona en los argumentos de una función, como
podemos ver a continuación:
Como podemos ver persona1 apunta a Jesús, persona2 a Juanma y persona3 a Pepe, esto
corresponde con el punto 3, es decir, lleva el orden del array/arreglo definido pero la
nomenclatura de las propiedades desestructuradas no coincide con la propiedad definida en el
arreglo/array, pero si podemos ver que el orden que sigue es exactamente igual que el del
array, es decir, si declaramos la constante de desestructuración de la siguiente manera:
En el caso de solo querer desestructurar una propiedad del array o arreglo, se realiza de la
siguiente manera:
Promesas
Las promesas nos sirven para ejecutar un código sin bloquear el código de nuestra aplicación,
algunas de las características de una promesa son las siguientes:
Como podemos ver, lo primero que se muestra es Inicio y Fin, pero la promesa se ha definido
antes del Fin esto ocurre debido a que como el código de la promesa no es bloqueante se sigue
ejecutando el resto del código y 1 segundo después que es lo definido en la promesa, se muestra
el resultado de la misma.
Realizamos una función que devuelve una promesa, por lo tanto, cuando llamamos a dicha
función, en la llamada debemos realizar el tratamiento de una promesa, ya que es lo que
devuelve la función, lo vamos a ver a continuación en un ejemplo:
Para definir que tipo va a devolver la función, que en este caso es una promesa, se especifica
después de los argumentos que recibe la función, el tipo que se define es aquel que devuelve
en caso de que todo vaya correcto, ya que si sucede algún error pues devuelve un error, a
continuación, se muestra un ejemplo:
Si ponemos otro tipado y es incorrecto al tipo que devuelve nos lo mostrará con un error:
Esto está ocurriendo debido a que el objeto que estamos enviando la propiedad ‘nombre’ que
se obtiene en la función enviarCarta no corresponde con la propiedad del objeto debido a que
es nombrePersona1.
La solución a esto es realizar un tipado, es decir, en vez de definir que el tipo que nos llega es
any, definimos el tipo que vamos a recibir en este caso sería del objeto persona el nombre de
tipo string, a continuación, veremos un ejemplo:
Es posible que necesitemos crear una función que se denomine devolverCarta, y en vez de la
variable ser nombre debemos cambiarla por nombrePersona, entonces nos supondría cambiarlo
en demasiados lados, como podemos ver a continuación:
El signo de ? en la propiedad dni indica que puede ser opcional, como vemos el objeto persona1
tiene un tipado a la interfaz Persona, y cada parámetro que se recibe en las funciones cuyo
tipado es persona, está regla es muy útil, debido a que si el día de mañana en la interfaz Persona
se añade alguna propiedad más que sea obligatorio en todos los objetos cuyo tipado sea Persona
nos indicará que falta dicha propiedad. Además, si alguna propiedad como puede ser nombre
cambia a ser nombrePersona, nos indicará que debemos cambiarlo en todo el resto de código
de nombre a nombrePersona dónde se utilizando. Esto nos sirve para tener más cerrado el
código y evitar utilizar propiedades genéricas.
- Número de puertas
- Color
- Marca
- Modelo
- Fabricante
Con un coche se en la vida cotidiana se puede realizar una serie de funciones como puede ser
arrancar, apagar, aparcar, conducir, etc.
Las funciones anteriores que se puede realizar con un coche en la vida cotidiana en POO son
conocidos como métodos.
También podemos encontrar la herencia, la herencia consiste en tener varias clases y una de
ella es la herencia, el resto de clases son heredadas del padre (La clase herencia). Es decir, las
clases hijas (Las que heredan de la clase padre, que es la clase herencia) contienen todos los
métodos y propiedades de la clase que heredan.
Como podemos ver la clase Figura, tiene dos propiedades (lados y área), y la clase Cuadrado y
Triángulo están formadas por dos propiedades también que son las mismas que podemos
encontrar en la clase Figura. Entonces aquí es donde debería intervenir la herencia, debido a
que la clase Cuadrado y Triángulo podrían heredar de la clase Figura y contener las propiedades
de la clase Figura.
Lo primero que tenemos que saber, que para la creación de una clase debemos inicializarla con
la palabra reservada class, además se debe seguir la conocida nomenclatura camello, Ejemplo
PersonasDiscapacitadas. No obstante, a continuación, podemos ver un ejemplo de la creación
de una clase en TypeScript.
En esta imagen, podemos ver la creación de una clase que está formada por un constructor
parametrizable. Además, también podemos ver un ejemplo de constructor que es
parametrizable y a la vez tiene datos inicializados por defecto (Método comentado).
Importaciones * URL
En el siguiente enlace podemos obtener un pack de inicio con typeScript, para la importación de
módulos en TypeScript hay que realizar una serie de configuraciones (Todas estas
configuraciones ya se encargan angular de realizarlas y no debemos nosotros hacerlas), por lo
que, si queremos realizar importaciones en TypeScript, solamente debemos descargarnos el
proyecto que hay en la siguiente URL, dónde ya está todo configurado para poder realizarlas sin
problema.
https://github.com/Klerith/webpack-starter-typescript
Esto lo que va realizar es crear el directorio de los módulos de node y reconstruirlo para dejar
todo el proyecto configurado con las dependencias necesarias para trabajar en él. Sí se ha
instalado correctamente nos aparecerá el paquete de node_modules cuando hagamos refresh
en el proyecto, en caso de no salir nos vamos al directorio ya que es posible que la carpeta esté
en estado oculto.
Para inicializar un proyecto que tiene dependencias npm y utiliza node debemos ejecutar el
siguiente comando:
Por lo tanto, para poder visualizar el proyecto nos iremos al navegador y pondremos:
localhost:8080
Además, una de las ventajas es que cuando realizamos un cambio en el proyecto y guardamos,
se realiza un reload automático de la página y podemos ver los cambios al instante y en caliente.
A continuación, nos vamos a basar en las importaciones, para ello en la carpeta src, creamos lo
siguiente:
Una vez que hemos creado la clase definimos las propiedades que queramos como hemos visto
anteriormente, si que vamos a tener una peculiaridad, y es que debemos añadir la palabra
reservada export antes de class, esto va a indicar que está clase va a ser poder utilizada en otros
ficheros.
Posteriormente, nos vamos a nuestro fichero index.ts y realizamos una importación de la clase
Persona, no deberíamos tener ningún problema ya que al haber hecho dicha clase export se va
a poder utilizar desde otros ficheros, para ello debemos añadir la siguiente línea al principio del
fichero dónde queremos importar la clase.
Decoradores de clases
Un decorador es algo que se le va a colocar antes de la declaración de la clase, a continuación,
podemos ver un ejemplo:
Por lo tanto, un decorador sirve para añadir funcionalidad a nuestra clase, es decir, al añadir el
decorador lo que estamos indicando es que está clase va a ser un servicio, todo esto angular lo
hará por defecto y de forma automática.
El decorador @imprimirConsolar, lo que indica es que la clase Persona va a tener todas las
funcionalidades que añadamos a imprimirConsola.