Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    Construcciones

    Mapped types

    Un bucle sobre una unión de claves que construye un tipo de objeto.

    Qué es

    Lee { [K in Keys]: Value } como: para cada K de este conjunto de claves, produce una propiedad llamada K cuyo tipo es esa expresión. Dos decisiones independientes por clave — cómo se llama, mediante la cláusula opcional as, y qué contiene. Partial, Required, Readonly, Pick y Record son una línea de esto cada uno.

    Ejemplos

    • Stringify<User>
      →{ id: string; name: string; }
    • Prefixed<User>
      →{ getId: number; getName: string; }

      La cláusula as renombra la clave. Así un tipo mapeado produce nombres que no estaban en la entrada.

    • Filtered<User>
      →{ name: string; }

      Renombrar una clave a never la elimina. Es la única forma en que un tipo mapeado puede descartar una propiedad.

    Cada tipo resuelto de arriba lo imprimió TypeScript 6.0.3, no se escribió a mano.

    Lo que no hace

    • No puede eliminar una clave desde el lado del valor. Producir never como *tipo* de propiedad deja la clave presente e imposible de rellenar, que no es lo mismo que ausente.
    • Deja de conservar los modificadores en cuanto el conjunto de claves se calcula. [K in keyof T] es homomórfico y mantiene readonly y ?; añade una cláusula as o une las claves y se pierden salvo que los vuelvas a poner.

    Conclusión

    Las claves se deciden en la cláusula de clave y los valores en la de valor. La mayoría de los errores en tipos mapeados son una de esas respuestas usada por accidente en lugar de la otra.