Cómo utilizar los guards de tipo en TypeScript

Cómo utilizar los guards de tipo en TypeScript

Un guard de tipo es una técnica de TypeScript utilizada para obtener información sobre el tipo de una variable, normalmente dentro de un bloque condicional. Los guards de tipo son funciones regulares que devuelven un boolean, tomando un tipo y diciéndole a TypeScript si puede reducirse a algo más específico. Los guards de tipo tienen la propiedad única de asegurar que el valor comprobado es de un tipo establecido en función del boolean devuelto.


TypeScript utiliza algunos operadores JavaScript incorporados como typeof, instanceof y el operador in, que se utiliza para determinar si un objeto contiene una propiedad. Los guards de tipo te permiten instruir al compilador de TypeScript para que infiera un tipo específico para una variable en un contexto particular, asegurando que el tipo de un argumento es el que tú dices que es.


Los guards de tipo se utilizan normalmente para acotar un tipo y son bastante similares a la detección de características, permitiéndole detectar los métodos, prototipos y propiedades correctas de un valor. Por lo tanto, puede averiguar fácilmente cómo manejar ese valor.


Hay cinco formas principales de utilizar un tipo de guard, las cuales son: La palabra clave instanceof, la palabra clave typeof, la palabra clave in, guard de tipo de estrechamiento de la igualdad y guard de tipo personalizada con predicado.


Índice de contenido

1. El guard de tipo instanceof


2. El guard de tipo typeof


3. El guard de tipo in


4. Guard de tipo parseo de igualdad


5. Guard de tipo personalizada con predicado


6. Conclusión


El guard de tipo instanceof

instanceof es un guard de tipo incorporado que se puede utilizar para comprobar si un valor es una instancia de una función constructora o clase dada. Con este guard de tipo, podemos comprobar si un objeto o valor deriva de una clase, lo cual es útil para determinar el tipo de una clase de instancia.


La sintaxis básica para el guard del tipo instanceof es la siguiente:


objectVariable instanceof ClassName;


En el siguiente ejemplo, vemos un ejemplo del guard del tipo instanceof:


La función getRandomAccessory anterior devuelve un objeto Necklace o bracelet, ya que ambos implementan la interfaz Accessory. Las firmas de los constructores de Necklace y bracelet son diferentes, y el guard de tipo instanceof compara ambas firmas de los constructores para determinar efectivamente el tipo.


El guard de tipo typeof

El guard de tipo typeof se utiliza para determinar el tipo de una variable. Se dice que el guard de tipo typeof es muy limitada y superficial. Sólo puede determinar los siguientes tipos reconocidos por JavaScript:


  • Boolean
  • String
  • Bigint
  • Symbol
  • Undefined
  • Function
  • Number

Para cualquier cosa fuera de esta lista, el guard de tipo typeof simplemente devuelve el object.


El guard de tipo typeof puede escribirse de las dos maneras siguientes:


typename puede ser un string, number, symbol o un boolean.


En el siguiente ejemplo, StudentId tiene una entrada de parámetro de unión de tipo string | number. Vemos que si la variable es un string, se imprime student, y si es un number, se imprime Id. El guard de tipo typeof nos ayuda a extraer el tipo de x:


El guard de tipo in

El guard de tipo in comprueba si un objeto tiene una determinada propiedad, utilizando ésta para diferenciar entre los distintos tipos. Normalmente devuelve un boolean, que indica si la propiedad existe en ese objeto. Se utiliza por sus características de estrechamiento, así como para comprobar la compatibilidad con el navegador.


La sintaxis básica de guard de tipo in es la siguiente:


propertyName in objectName


En el ejemplo siguiente, el guard de tipo in comprueba si la propiedad house existe. En los casos en que existe, se devuelve el boolean true, y en los que no existe, se devuelve false.


A continuación se muestra otro ejemplo similar de cómo funciona el guard de tipo in:


Guard de tipo parseo de igualdad

El parseo de igualdad comprueba el valor de una expresión. Para que dos variables sean iguales, ambas deben ser del mismo tipo. Si el tipo de una variable no se conoce, pero es igual a otra variable con un tipo preciso, entonces Typescript estrechará el tipo de la primera variable con la información que proporciona la variable conocida:


Si la variable a es igual a la variable b, entonces ambas tienen que tener el mismo tipo. En este caso, Typescript lo reduce a string. Sin el parseo, el tipo de a sigue sin estar claro porque podría ser tanto un número como un string.


Guard de tipo personalizada con predicado

La creación de un guard de tipo personalizada es normalmente la opción más potente para utilizar los guards de tipo. Cuando creas un guard de tipo personalizada escribiéndola tú mismo, no hay límites para lo que puedes comprobar. Sin embargo, si el guard de tipo personalizada se escribe de forma incorrecta, puede dar lugar a muchos errores. Por lo tanto, la precisión es clave.


A continuación, se muestra un ejemplo de guard de tipo personalizado:


En el código anterior, el predicado de tipo b is Necklace hará que TypeScript reduzca el tipo a Necklace en lugar de devolver sólo un valor boolean.


Conclusión

Los guards de tipo de TypeScript son útiles para asegurar el valor de un tipo, mejorando el flujo general del código. Aquí  revisamos varios de los guards de tipo más útiles en TypeScript, explorando algunos ejemplos para verlos en acción.


  Obten el codigo utilizado aqui


¡Gracias por llegar hasta aquí!


Reactions

4

0

0

0

Access hereTo be able to comment

TheWhiteCode.com is not the creator or owner of the images shown, references are: