Saltar al contenido
webtype.orgwebtype.orgtsconfig

    ↑↓ mover · ⏎ abrir · esc cerrar

    tsconfig

    noUncheckedIndexedAccess

    Una firma de índice es una conjetura

    Leer una clave que nunca se escribió da `undefined` en ejecución. Esta es la bandera que lo dice en el tipo.

    Desde
    TypeScript 4.1
    strict
    Fuera de strict
    En tu tsconfig
    "noUncheckedIndexedAccess": true
    Compilado con
    "strict": true

    El mismo fragmento las dos veces. Solo cambió la opción.

    Con ella apagada

    "noUncheckedIndexedAccess": false
    const rows: Record<string, string> = {}
    
    export const first: string = rows.a

    Compila limpio

    Con ella encendida

    "noUncheckedIndexedAccess": true
    const rows: Record<string, string> = {}
    
    export const first: string = rows.a

    Emite TS2322

    Por qué al compilador le importa

    Lo más sorprendente de `strict` es que no la incluye. `Record<string, string>` afirma que cada una de las infinitas claves de texto guarda un string, algo que nunca es cierto de ningún objeto real, y el mismo agujero está en todo acceso a array: `items[5]` sobre un array de tres elementos es `undefined` y está tipado como el elemento. No está bajo `strict` porque activarla reescribe cada cuerpo de bucle y cada búsqueda de un proyecto, y se juzgó demasiado como para imponerlo por defecto. Sigue siendo el ajuste correcto.

    Conclusión

    Actívala pronto en un proyecto o nunca. Añadirla después es la opción cara.

    Adónde ir después

    22 opciones