ahora mismo. Vale, creo que eso está bien. Podemos continuar. Bien. Entonces, la estructura de la aplicación si vas a echar un vistazo, entonces hay una carpeta con modules que hay algunos TypeScript tipos de algunas entidades con las que trabajamos en la aplicación. Podrías notar que la definición es es un poco extraña. Es porque utilicé una biblioteca llamada Generic Type Guard para crear type guards para la entidad y al mismo tiempo desde el type guard obtener el tipo de la entidad en realidad. No sé si sabes lo que es un type guard. Es solo, es una función que durante el tiempo de escritura, runtime devuelve un booleano, ya sea verdadero o falso. Y para el TypeScript, proporciona la información si el argumento proporcionado es de algún tipo, o no lo es. El tipo debería ser subtipo del tipo proporcionado. Así, por ejemplo, puedo tener un, podemos tener un podemos tener un type guard que recibe un argumento de tipo booleano y voy a decir vale si devuelvo verdadero el argumento es en realidad de tipo verdadero no de tipo booleano sino de tipo verdadero, ves en un en TypeScript en TypeScript, algo puede ser de tipo verdadero y verdadero está bien. Falso me da un error. que booleano en realidad es solo una unión de tipo verdadero o tipo falso, algo así. Así que puedo tener un puedo tener un type guard que dice, vale, veré si un argumento. Y en el tipo devuelto, diré, vale, el argumento es algún tipo más específico de del tipo que he recibido. Y luego la implementación de la función realmente depende del implementador. Puedo simplemente devolver siempre verdadero, que obviamente no es una implementación válida. O puedo decir algo así, que sería una implementación válida. Así que este es un type guard y obviamente el tipo, Así, una de las formas comunes de los type guards es que recibes un desconocido, porque uno de los usos más comunes para los type guards son los límites de tu sistema. Cuando escribes en tu aplicación, tienes algunos límites. Por ejemplo, obtienes algunos data de una API. Los data que recibes de la red son algunos data de los que realmente no puedes estar seguro de qué tipo de data es. La función JSON parse devolverá cualquier cosa, porque es solo una cadena que has analizado y tú no estás seguro de lo que hay en ella. Así que esto es algo de los data proviene de fuera de tus límites, fuera de tu sistema Eso está dentro de tu sistema. Todo está tipado y perfecto y hermoso. Y tú, puedes estar seguro de que lo que recibes es lo que los tipos declaran que debería ser, pero desde fuera de nuestro sistema, no puedes estar seguro de eso. Así que, uh, si recibes de algo fuera de tu sistema, debería ser de tipo desconocido porque el tipo desconocido no es asignable a nada. Es algo que. que primero tienes que usar type guard en para afirmar que es de un cierto tipo. Así que si reescribo mi type guard, será este type guard que acepta desconocido en su lugar. Voy a, funcionará igual, pero debería simplemente reescribir mi implementación a algo como esto. Irko, ¿podrías hacer la fuente un poco más grande? Por supuesto. Gracias. ¿Puedo quitar el… Puedes usar el atajo, puedes hacer clic en la parte superior y luego usar el atajo de comando más. Pero el puntero debería estar lejos de la página en sí. puedes hacer clic en algún lugar fuera de la página sí vale gracias ¿es suficiente principiante o debería vale así que la implementación adecuada para este type guard sería algo así esto correcto porque primero necesitamos afirmar en runtime que realmente es un booleano porque nosotros no sabemos qué va a ser, puede ser un objeto, puede ser un número, puede ser nulo, indefinido, lo que sea. Así que este es un type guard. Y el type guard, guarda el argumento de que será de un cierto tipo y básicamente la biblioteca de tipo guard genérico proporciona un conjunto de type guards y un conjunto de utilidades para construir typeguards por ejemplo aquí hay una utilidad es interfaz que proporciona un typeguard para construir typeguards de un tipo de objeto aquí especificamos typeguards para diferentes propiedades vamos a decir que vale el tipo que vamos a recibir debería ser un objeto objeto debería tener una propiedad id que debería ser de tipo string y debería tener una propiedad nombre que también debería ser del mismo tipo. Y luego vamos a llamar a la función get que simplemente hace, crea el type guard al final. Y al final, hay una pequeña utilidad que escribí que básicamente modifica un type guard para devolver un tipo de solo lectura, porque a menudo me gusta trabajar con tipos de solo lectura y un código inmutable porque, es simplemente más fácil de seguir al menos para mí. Y de nuevo, este make-addit-only, es una utilidad bastante simple que modifica un type guard existente que transforma una entrada en una salida o asails el tipo de entrada es en realidad de tipo de salida y modifica el type guard de tal manera que también, no solo asails que es un tipo de salida, pero también es un tipo de salida de retorno. ¿Y cuál es la ventaja de declarar el tipo de esta manera? Porque si miras el tipo de organizador, es exactamente el tipo que especificamos en el tipo que, pero también podemos, podrías decir por qué no escribimos el tipo directamente y luego escribimos el type guard aparte de esto, nosotros mismos. Bueno, la ventaja de esto es que realmente especificamos lo que el tipo debería tener en el type guard. Y porque TypeScript es un sistema de tipado estructural, si yo escribiera un tipo, por ejemplo, con propiedades ID y nombre. Luego escribo un type guard que afirma tal tipo, y luego, volvería y diría, vale, en realidad no necesito la propiedad nombre por alguna razón porque no me gusta. Simplemente eliminaría la propiedad del tipo en sí. Entonces tendría el type guard al lado de él. No estaría obligado a eliminar la comprobación de la propiedad como en realidad puedo mostrarlo sería más fácil bien y ahora esto es esto es un type guard de mi tipo de organizador y ahora si yo digo vale no quiero esto no hay error el type guard seguirá todavía comprobando que el nombre está ahí y fallará si el nombre está ahí pero no debería no debería fallar pero lo hará porque el typeskit no lo hará hacer cumplir el typeskit no hará cumplir el type guard para comprobar exactamente el tipo puede comprobar algún tipo que eso es más amplio que tiene más propiedades eso no es lo que quiero aquí así que en lo que en lugar de eso hice es que definen el type guard en lugar directamente y luego inferir el tipo del type guard este tipo de basura utilidad tipo es puedes pensar en estos tipos de utilidad como tipo de nivel funciones, aceptan un tipo y luego devuelven un tipo. Así que, básicamente, transforman el tipo. Tienen algunas entradas y algunas salidas y ambas son tipos. Eso se llama función de nivel de tipo. Y esta función de nivel de tipo, acepta un tipo de un type guard, que es este. Y porque este es un valor de nivel runtime, no es un tipo, es una constante, necesitamos aplicar el operador de tipo que obtiene el tipo del valor de runtime.
Comments