Cholo Programando
Typescript: Como sobreponer interfaces y luego constrainearlas
Hace poco me paso que quería crear una función que aceptase un parametro que podía cumplir con una de dos interfaces (bastante similares, pero con unas propiedades que diferían).
Imaginemos la funcion Matar(PARAMETRO)
Queremos que el tipo de PARAMETRO sea lo suficientemente general para admitir el tipo Humano o Vaca.
Pero que nos de la flexibilidad de decidir dentro del metodo, que si en dicho objeto tenemos propiedades de una Vaca, se haga algo (empaquetar la carne, por ejemplo). Y si es un Humano que se haga otra cosa (Tirarlo a un hueco).
Ese tipo lo podriamos llamar SerVivo.
Dadas las siguientes interfaces:
interface Humano {
name: string,
age: number,
country: string
}
interface Vaca {
age: number,
country: string,
specie: string
}
Lo primero que podríamos hacer es:
type SerVivo = Humano & Vaca
En este caso se consideraría que este tipo tiene todas las propiedades de Vaca y Humano (lo que no es correcto).
Un siguiente paso sería conseguir que las propiedades exclusivas de Humano o Vaca, sean marcadas como opcionales (ya que con estas filtrariamos el tipo exacto que tenemos).
Para ello crearemos un tipo auxiliar llamado PartialBy, que nos devolverá un tipo con "x" propiedad marcada como opcional y el resto como requeridas.
type PartialBy = Omit & Partial
Omit -> Toma todas las propiedades menos la que especificas en K
Partial -> Setea todas las propiedades como opcionales
La suma de estos dos da: Todas la propiedades marcadas como requeridas, menos la que pongas en el lugar de "K".
Entonces, nuestro tipo SerVivo quedaría:
type SerVivo = PartialBy & PartialBy
Ahora podríamos desarrollar mas a fondo nuestro metodo Matar:
const Matar = (ser: SerVivo) => {
if(ser.specie){
const carne = cortar(ser)
enviar(carne)
}
if(ser.name){
const cuerpo = ahorcar(ser)
enterrar(cuerpo)
}
}
Un lindo ejemplo para que aprendan como crear un tipo medianamente generico, pero con la posibilidad de tamizarlo a su antojo.
Si querés usar Cookies entre Dominios (Cookies de Terceros) acordate de 3 cosas:
- Que tu Back tenga en su politica de CORS (WithOrigins, AllowCredentials) para que permita que el Front le hablé y le envie Cookies.
- Que el Front, en las solicitudes Fetch que necesiten enviar la Cookie, tenga en sus opciones {credentials: 'include'}
- Que la Cookie al ser creada tenga (SameSite: None, Secure: true)
Esto último implica que para que la Cookie pueda ser seteada, el Back tiene que estar corriendo en HTTPS (Secure: true) y que esa Cookie puede ser usada por otro sitio distinto al que la seteo (SameSite: None).
# A tener en cuenta: Si estas corriendo tu Front en Modo Incognito, por defecto Google no va a enviar Cookies de Terceros (O sea, las que aprendimos a setear en este post). Así que preferiblemente, no corras tu Front en Incognito al probar esto.
Estas Cookies pueden ser de Autenticación, de Métricas, etc.
Elon Musk dueño de Twitter? Ni uso esa red social, pero me parece loquísimo como un tipo "porque si" decide comprar uno de los medios de comunicaçao mas grandes del mundo.
Se habló de libertad de expresión. Y no deja de sonar magnífico en el papel.
Ahora que al fin sucedió, solo nos queda esperar y ver...
Que le deparará al pajarito celeste? 😱
11/04/2022
Pequeño Dato 🍎 (relacionado con bases de datos)
Si tuvieses que almacenar en una DB los amigos de un usuario. Y recién estuvieses empezando. Es muy probable que a tu tabla Usuarios se te ocurra ponerle un campo "Amigos" y que el tipo de valor sea un string.
"[1,23,4,6]"
Mas específicamente un array de ids parseado a string (es lo primero que se te ocurre, el que diga que no, miente!).
Sin embargo eso no es lo mejor que puedes hacer. En realidad es algo terrible. Porque la idea es que "normalices" la información. O sea que evites repetir datos. En este caso el amigo A tendría una referencia al Id del amigo B, y el amigo B al amigo A. Un error al parsear alguno de los 2 campos "Amigos" y tendrías la información errada.
Lo optimo en estos casos es crear una nueva tabla, Amigos (tabla de unión). Y que esta tenga dos campos:
AmigoA / AmigoB
Estos campos deberían ser poblados con los Ids de 2 usuarios que sean amigos.
De este modo. Si quisieras traer a todos los amigos del Usuario con Id "123". Buscarías todas las filas donde AmigoA o AmigoB son "123". Y luego ya con esos ids, filtrarías la tabla Usuarios para traer a todos los amigos de "123".
Esto sería una relación Many-to-Many (mas específicamente self-referencing many-to-many). Ya que Usuarios puede tener varios amigos que son Usuarios. Y lo mismo al revés.
En este caso estamos relacionando Usuarios con Usuarios, por eso es self-referncing. Pero también podríamos relacionar Usuarios y Servicios, donde un Usuario puede tener muchos Servicios, y un Servicio también puede tener muchos Usuarios. En ese caso estaríamos hablando de una relacion many-to-many a secas.
Bueno, era mas que nada para decirles esta vaina. Ojalá tengan un buen día 🤟 nos olemos luego
Si quieren cavar un poco mas hondo: https://fmhelp.filemaker.com/help/18/fmp/es/index.html /FMP_Help/many-to-many-relationships.html
11/01/2022
Muchos no acabaron ni el secundario. Y están pensando en como hacer platita sin necesidad de salir a chorear. 🔪
Para toda ese gente con ganas de saber si necesitan o no tener estudios universitarios para poder ser desarrolladores. Acá les dejo la palabra del Cholo Programador para que la disfruten. 🦙
¿Necesito estudios universitarios para ser programador en 2022? Bueno, la respuesta corta es “no”. Y la respuesta larga es “la verdad, no”.
Haga clic aquí para reclamar su Entrada Patrocinada.
Teléfono
Página web
Dirección
Monserrat
1087