Saltar al contenido
webtype.orgHacer que Omit detecte erratas

    ↑↓ mover · ⏎ abrir · esc cerrar

    Patrones

    ¿Cómo evito que `Omit<User, "nmae">` tenga éxito en silencio y no quite nada?

    El integrado restringe su parámetro de clave a `keyof any`, que es toda clave que pudiera existir. Restríngelo a `keyof T` en su lugar.

    La receta

    type StrictOmit<T, K extends keyof T> = Omit<T, K>
    
    type User = { id: number; name: string; email: string }
    
    type WithoutEmail = StrictOmit<User, 'email'>

    La compilación compila esto y comprueba cada resultado de abajo.

    Cómo funciona

    1. 01
      type StrictOmit<T, K extends keyof T> = Omit<T, K>

      Toda la receta. El cuerpo sigue delegando en el integrado — solo la puerta es más estrecha, y la puerta era donde estaba el fallo.

    Lo que obtienes

    Dónde falla

    Es más estricto que el integrado de un modo que a veces muerde: `Omit` es deliberadamente permisivo para poder usarse sobre uniones y sobre tipos cuyas claves aún no se conocen. Cambiarlo globalmente sacará a la luz código real que dependía de eso.

    Conclusión

    Una línea, y elimina toda una clase de fallo silencioso. Ponla en el mismo archivo que tus otros tipos compartidos y no vuelvas a escribir `Omit` a secas.

    Véase también

    Patrones