
Objetivos generales:
Obtendrás bases sólidas de TypeScript
Construir aplicaciones escalares en TypeScript
Programar sin errores de tipo
Buenas prácticas para ahorrar código
TypeScript es un lenguaje desarrollado por Microsoft de programación de código abierto. En realidad es un superconjunto de JavaScript, por lo cual todo el código de JavaScript es válido también también en TypeScript. La principal característica de TypeScript es que introduce u poderos tipado estático, con lo cual especificaremos los tipos de datos para variables, parámetros de funciones y propiedades de objetos antes de la ejecución del código.
1995 javascript
2005 AJAX
2006 jquery
2008 Google Chrome (V8)
2009 node.js
2010 Dart / Flutter / Kotlin
2012 typescript (Microsoft)
Por lo general, no se necesitan otros pasos para usar los tipos después de instalar el paquete de declaración; TypeScript seleccionará automáticamente los tipos cuando use el paquete en sí.
Los editores como Visual Studio Code a menudo sugieren instalar paquetes como estos cuando faltan tipos.
Por omisión Typescript genera código en Javascript versión ECMA Script 3 y ECMA Script 5.
Si desea que se genere código en ECMA Script 6, necesitamos utilizar el parámetro:
La configuración de TypeScript se encuentra en el archivo tsconfig.json.
Al iniciar un proyecto podemos iniciarlo con el parámetro:
Hay tres tipos primitivos principales en JavaScript y TypeScript.
boolean: valores verdaderos o falsos
number: números enteros y valores de punto flotante
string: valores de texto como "TypeScript Rocks"
Al crear una variable, hay dos formas principales en que TypeScript asigna un tipo:
Explícito
Implícito
any es un tipo que deshabilita la verificación de tipos y permite efectivamente que se utilicen todos los tipos.
any Puede ser una forma útil de evitar errores, ya que deshabilita la comprobación de tipos. Sin embargo, TypeScript no podrá proporcionar seguridad de tipos, y las herramientas que dependen de datos de tipos, como el autocompletado, no funcionarán. Recuerde, debe evitarse a toda costa.
undefined y null son tipos que hacen referencia a los primitivos de JavaScript undefined y null respectivamente.
Estos tipos no tienen mucha utilidad a menos que strictNullChecks estén habilitados en el archivo tsconfig(.)json.
Un alias de tipo es un nombre para cualquier tipo .
En realidad no crea un nuevo tipo, sino que podemos utilizar al mismo de una forma más clara mejorando la claridad de nuestro código.
A partir de ECMA Script 2020 existe BigInt, que es un tipo primitivo en JavaScript que se utiliza para números enteros muy grandes.
Hay un primitivo en JavaScript que se utiliza para crear una referencia globalmente única a través de la función Symbol().
JavaScript admite el operador typeof que proporciona información muy básica sobre el tipo de valores disponibles en tiempo de ejecución.
TypeScript espera que devuelva un conjunto específico de cadenas:
"string"
"number"
"bigint"
"boolean"
"symbol"
"undefined"
"object"
"function"
La palabra clave readonly puede evitar que se modifiquen las matrices.
No se puede usar métodos como push, pop, shift, splice o unshift.
Se puede acceder a los elementos del arreglo usando el índice (por ejemplo, readonlyArray[0]) o iterar a través de él.
La palabra clave readonly puede evitar que se modifiquen las matrices.
No se puede usar métodos como push, pop, shift, splice o unshift.
Se puede acceder a los elementos del arreglo usando el índice (por ejemplo, readonlyArray[0]) o iterar a través de él.
TypeScript puede inferir el tipo de una matriz si tiene valores.
La inferencia de tipos en TypeScript se refiere a la capacidad del compilador para deducir automáticamente el tipo de una variable, parámetro o función en función de su contexto o valor inicial.
TypeScript tiene una sintaxis específica para escribir arreglos.
En TypeScript, las tuplas son arreglos con un tamaño fijo y tipos de datos predefinidos para cada índice.
Se utilizan para crear estructuras de datos con un orden específico de elementos de diferentes tipos, lo que no es posible con arreglos regulares.
Una buena práctica es hacer que tu tupla sea readonly .
Las tuplas solo tienen tipos fuertemente definidos para los valores iniciales:
Las tuplas con nombre nos permiten proporcionar contexto para nuestros valores en cada índice.
Las tuplas con nombre proporcionan más contexto sobre lo que representan nuestros valores de índice.
Dado que las tuplas son matrices, también podemos desestructurarlas.
TypeScript tiene una sintaxis específica para escribir objetos.
Una propiedad opcional se marca con un signo de interrogación (?)
Si se intenta acceder a una propiedad opcional que no existe, el código no generará un error hasta que se intente acceder a ella en tiempo de ejecución.
Las propiedades opcionales son propiedades que no es necesario definir en la definición del objeto.
Las firmas de índice se pueden utilizar para objetos sin una lista definida de propiedades.
Se usan para definir el tipo de propiedades con nombres de tipo dinámico en un objeto o tipo. Permiten especificar el tipo de índice (clave) y el tipo de valor que ese índice puede tener.
Una enumeración es una "clase" especial que representa un grupo de constantes (variables inmutables).
Las enumeraciones vienen en dos tipos string: numeric.
Los alias de tipo permiten definir tipos con un nombre personalizado (un alias).
Los alias de tipo se pueden utilizar para primitivos como string tipos más complejos como object y array:
Las interfaces son similares a los alias de tipos, excepto que solo se aplican a los tipos object.
Las interfaces se utilizan para definir el tipo de objetos que se van a utilizar en el código, permitiendo que TypeScript valide que los objetos coincidan con la estructura definida.
Las interfaces pueden ampliar la definición de cada una.
Extender una interfaz significa crear una nueva interfaz con las mismas propiedades que la original, más algo nuevo.
Los tipos de unión se utilizan cuando un valor puede ser más de un tipo.
Como por ejemplo cuando una propiedad sería string o number.
Usando el | estamos diciendo que nuestro parámetro es a string o number:
TypeScript tiene una sintaxis específica para escribir parámetros de función y valores de retorno.
El tipo de valor devuelto por la función se puede definir explícitamente.
Si no se define ningún tipo de retorno, TypeScript intentará inferirlo a través de los tipos de las variables o expresiones devueltas.
Escribir parámetros con nombre sigue el mismo patrón que escribir parámetros normales.
Los parámetros con nombre se implementan usando un objeto como argumento de la función. Esto permite especificar los valores de los parámetros por su nombre, en lugar de depender de su posición en la lista de argumentos.
Los parámetros Rest se pueden escribir como parámetros normales, pero el tipo debe ser una matriz, ya que los parámetros “rest” siempre son arreglos.
El método reduce() en JavaScript se utiliza para reducir un arreglo a un único valor.
Los tipos de funciones se pueden especificar por separado de las funciones con alias de tipo.
Estos tipos se escriben de manera similar a las funciones de flecha.
Cuando una función aparece en un lugar donde TypeScript puede determinar cómo se llamará, sus parámetros reciben automáticamente tipos.
Pero al combinar literales en uniones, puedes expresar un concepto mucho más útil; por ejemplo, funciones que solo aceptan un determinado conjunto de valores conocidos.
El operador in en JavaScript determina si un objeto o su cadena de prototipos tiene una propiedad con nombre. TypeScript lo tiene en cuenta para delimitar los tipos potenciales.
JavaScript tiene un operador para comprobar si un valor es una "instancia" de otro valor. Más específicamente, en JavaScript, x instanceof Foo comprueba si la cadena de prototipos de x contiene Foo.prototype.
La forma más sencilla de realizar un “casting” es por medio de la palabra reservada “as”, el cual cambiará el tipo de la variable dada.
El uso de <> funciona de la misma manera que la conversión con as.
Aunque la sintaxis de <> existe, se recomienda usar as para evitar conflictos con JSX, especialmente en entornos de desarrollo React.
Para anular los errores de tipo que TypeScript puede generar al realizar una conversión (casting), primero realice una conversión a unknown y luego al tipo de destino.
Los miembros de una clase (propiedades y métodos) se tipifican mediante anotaciones de tipo, de forma similar a las variables.
En TypeScript una función constructora (constructor) es un método especial dentro de una clase que se ejecuta automáticamente al crear una instancia de esa clase.
Se utiliza para inicializar las propiedades del objeto.
En TypeScript, los getters y setters son métodos especiales que permiten controlar el acceso y la modificación de las propiedades de una clase.
Los getters se utilizan para recuperar el valor de una propiedad, mientras que los setters se utilizan para establecer un nuevo valor.
En TypeScript los métodos de clase son funciones que se definen dentro de una clase y operan sobre instancias de esa clase.
Se utilizan para definir el comportamiento de los objetos creados a partir de la clase.
A los miembros de la clase también se les otorgan modificadores especiales que afectan la visibilidad.
Hay tres modificadores de visibilidad principales en TypeScript:
De manera similar a los arreglos, la palabra clave readonly puede evitar que se modifiquen los miembros de la clase.
Las interfaces se pueden usar para definir el tipo que una clase debe seguir a través de la palabra clave implements.
Una clase puede implementar múltiples interfaces enumerando cada una de ellas después de implements, separadas por una coma de la siguiente manera:class Rectangulo implements Forma, Colores{
Las clases pueden extenderse entre sí mediante la palabra clave extends. Una clase solo puede extender otra clase.
La palabra clave super se utiliza para acceder al constructor y a los métodos de la clase padre (superclase) desde una clase derivada (subclase).
Cuando una clase extiende otra clase, puede reemplazar los miembros de la clase padre con el mismo nombre.
Las versiones más nuevas de TypeScript permiten marcar esto explícitamente con la palabra clave override.
Los genéricos con funciones ayudan a crear métodos más generalizados que representan con mayor precisión los tipos utilizados y devueltos.
TypeScript también puede inferir el tipo del parámetro genérico a partir de los parámetros de la función.
Los genéricos se pueden utilizar para crear clases generalizadas.
TypeScript también puede inferir el tipo del parámetro genérico si se utiliza en un parámetro constructor.
En TypeScript las interfaces genéricas se utilizan para definir “contratos” que pueden operar con diferentes tipos de datos, permitiendo la reutilización de código y la seguridad de tipos.
Se declaran utilizando corchetes angulares <> después del nombre de la interfaz, donde se especifica un parámetro de tipo (generalmente una letra como T).
Los genéricos también se pueden utilizar dentro de funciones para crear funciones que trabajen con diferentes tipos de datos de manera segura.
Los genéricos los podemos extender de una interface.
Podemos declarar un parámetro de tipo restringido por otro parámetro de tipo. Queremos obtener una propiedad de un objeto dado su nombre. No queremos obtener accidentalmente una propiedad que no existe en el objeto, así que estableceremos una restricción entre los dos tipos.
Podemos crear fábricas en TypeScript con genéricos, es necesario referirse a los tipos de clase mediante sus funciones constructoras.
La propiedad de prototipo para inferir y restringir las relaciones entre la función constructora y el lado de instancia de los tipos de clase.
A los genéricos se les pueden asignar valores predeterminados que se aplicarán si no se especifica o infiere ningún otro valor.
Partial cambia todas las propiedades de un objeto para que sean opcionales.
Los genéricos se pueden utilizar para crear clases generalizadas.
Required es útil cuando se necesita asegurar que ciertas propiedades siempre estén presentes en un objeto, especialmente cuando se trabaja con datos que deben ser completamente definidos en ciertas operaciones o contextos.
Record es un atajo para definir un tipo de objeto con un tipo de clave y un tipo de valor específicos.
En TypeScript el tipo Record<K, T> se utiliza para crear un objeto con claves de tipo K y valores de tipo T.
Se pueden añadir restricciones a los genéricos para limitar lo permitido. Estas restricciones permiten confiar en un tipo más específico al usar el tipo genérico.
Esto se puede combinar con un valor predeterminado.
Se pueden añadir restricciones a los genéricos para limitar lo permitido. Estas restricciones permiten confiar en un tipo más específico al usar el tipo genérico.
Esto se puede combinar con un valor predeterminado.
Exclude elimina tipos de una unión.
ReturnType extrae el tipo de retorno de un tipo de función.
Parameters extrae los tipos de parámetros de un tipo de función como una tupla.
La utilidad Parameters<Type> se utiliza para extraer los tipos de parámetros de una función en un tipo de tupla.
Esto significa que puedes obtener un tipo que representa la lista de tipos de cada parámetro de una función específica.
Readonly Se utiliza para crear un nuevo tipo donde todas las propiedades son de solo lectura, lo que significa que no se pueden modificar una vez que se les asigna un valor.
TypeScript es un lenguaje desarrollado por Microsoft de programación de código abierto. En realidad es un superconjunto de JavaScript, por lo cual todo el código de JavaScript es válido también también en TypeScript. La principal característica de TypeScript es que introduce u poderos tipado estático, con lo cual especificaremos los tipos de datos para variables, parámetros de funciones y propiedades de objetos antes de la ejecución del código. Esto ayuda a detectar errores de tipo antes de la ejecución del código, mejorando la calidad y mantenibilidad del mismo, especialmente en proyectos grandes.
En resumen, TypeScript es JavaScript con esteroides, lo que facilita el desarrollo de aplicaciones web y de servidor más estructura y mantenibles. Los objetivos del curso son:
Aprenderá la historia de Typescript, su instalación y el uso del parámetro target y el manejo del archivo de configuración tsconfig.json.
Aprenderá al manejo de los tipos simples, la asignación de tipo, tipos especiales como any, unknown y never, los tipos undefined y null.
Aprenderá a los tipos Arrays, crear las variables de sólo lectura o readonly, las inferencia de tipos, los tipos Tuplas, las tupla de solo lectura y la creación de las tuplas.
Manejará los tipo de objetos, la inferencia y propiedades opcionales, crear las firmas de índice (Index Signatures) y las enumeradores o tipo enum.
Realizará el manejo de los Alias de tipo (type), las Interfaces, las Ampliación de interfaces y el manejo de Union Types
Realizará el manejo de las funciones, el tipo de retorno, los parámetros con nombre, los parámetros …rest, el alias de tipo en las funciones y otros temas.
Aprenderá a manejar el casting con la palabra reservada as, crear el casting con <> y aplicar el casting forzado.
Creará los miembros de clases, crear la función constructora, funciones getter y setter, añadir los métodos, modificadores de visibilidad, añadir los parámetros
Aprenderá a manejar los tipos genéricos en funciones, los tipos genéricos en Clases, los tipos genéricos en interfaces, los genéricos con arreglos y los genérico de funciones.
Creará la utilidad Parcial, Required, Record, la utilidad Omit, la utilidad Pick, la utilidad Exclude, la utilidad ReturnType, la utilidad Parameters.
Usará keyof con claves explícitas, los tipos primitivos: null y undefined, el encadenamiento opcional, nullish Coalescence (coalescencia nula), afirmación nula.
Para aprovechar este curso debes tener buenas bases de JavaScript ya que no se verán las bases de este lenguaje. Este curso está dirigido a desarrolladores con JavaScript. En todo momento contarás con los archivos del curso.