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": falseconst rows: Record<string, string> = {} export const first: string = rows.a
Compila limpio
Con ella encendida
"noUncheckedIndexedAccess": trueconst 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

