Saltar al contenido
webtype.orgMapped types

    ↑↓ 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 5.9.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.