tsconfig
Una página por opción. Cada una lleva un fragmento compilado dos veces, una con la opción apagada y otra encendida, y los diagnósticos exactos que produjo cada pasada — comprobados por la compilación, no por nosotros.
Cada antes y después de estas páginas se compila de las dos formas en tiempo de compilación
El alcance son las opciones que cambian lo que acepta el comprobador de tipos. Las opciones de emisión — target, module, jsx, declaration — cambian lo que sale y no lo que se permite; demostrarlas implica comparar el JavaScript generado, que es otro verificador y aún no está aquí. Las páginas comprobadas a medias son peores que las ausentes.
Bajo strict
strictDesde 2.3TS18047Más que una opción es una suscripción: activa otras ocho comprobaciones, y sigue activando las que se añadan después de que escribieras tu tsconfig.
strictNullChecksDesde 2.0En strictTS18047Sin ella, `null` y `undefined` son miembros de todos los tipos, así que `string` significa en silencio «string, o nada en absoluto».
noImplicitAnyDesde 1.6En strictTS7006Un parámetro que el compilador no puede inferir se vuelve `any`; esto hace que lo diga en vez de callarlo.
strictFunctionTypesDesde 2.6En strictTS2322Una función que acepta menos no puede sustituir a una que debe aceptar más: obvio al decirlo, y sin comprobar sin esta bandera.
strictBindCallApplyDesde 3.2En strictTS2345Sin ella, estos tres aceptan cualquier argumento, porque sus tipos declarados dicen `any[]`.
strictPropertyInitializationDesde 2.7En strictTS2564Declarar `token: string` dice que la propiedad es un string. Antes de esta bandera, nada comprobaba que llegara a serlo.
noImplicitThisDesde 2.0En strictTS2683Dentro de una función anidada normal, `this` no es el objeto donde la escribiste, y sin esta bandera es silenciosamente `any`.
useUnknownInCatchVariablesDesde 4.4En strictTS18046JavaScript puede lanzar cualquier cosa —un string, undefined, un número—, así que el valor capturado es `unknown` y no `any`.
Corrección, fuera de strict
noUncheckedIndexedAccessDesde 4.1Fuera de strictTS2322Leer una clave que nunca se escribió da `undefined` en ejecución. Esta es la bandera que lo dice en el tipo.
exactOptionalPropertyTypesDesde 4.4Fuera de strictTS2375`{ retries?: number }` normalmente también permite `{ retries: undefined }`. Esta bandera hace que el signo de interrogación signifique solo «puede faltar».
noPropertyAccessFromIndexSignatureDesde 4.2Fuera de strictTS4111Reserva `obj.key` para las propiedades realmente declaradas y empuja todo lo que venga de una firma de índice a `obj["key"]`.
noImplicitOverrideDesde 4.3Fuera de strictTS4114Exige la palabra `override` en cualquier miembro que sustituya a uno de la clase base.
Código muerto y nombres sin usar
noImplicitReturnsDesde 2.0Fuera de strictTS7030Una función donde unas ramas devuelven un valor y otras se caen por el final es casi siempre un caso que falta.
noFallthroughCasesInSwitchDesde 1.8Fuera de strictTS7029Marca un `case` que hace algo y luego cae en el siguiente, permitiendo aún la caída vacía deliberada.
noUnusedLocalsDesde 2.0Fuera de strictTS6133Un local sin leer suele ser el resto de un cambio hecho a medias.
noUnusedParametersDesde 2.0Fuera de strictTS6133Informa de parámetros declarados y nunca leídos, con un guion bajo inicial como forma documentada de decir que era intencionado.
allowUnreachableCodeDesde 1.8Fuera de strictTS7027Ponla en `false`: por defecto solo avisa en el editor, y un aviso no es un fallo de compilación.
allowUnusedLabelsDesde 1.8Fuera de strictTS7028Una etiqueta sin usar casi nunca es una etiqueta: es un objeto literal o una anotación de tipo que se interpretó como tal.
Módulos y forma de la emisión
verbatimModuleSyntaxDesde 5.0Fuera de strictTS1484Un import usado solo como tipo debe escribirse `import type`, de modo que el JavaScript emitido sea lo que muestra el fuente.
isolatedModulesDesde 1.5Fuera de strictTS1205Rechaza las construcciones que no pueden compilarse bien sin mirar otros archivos, que es como compila todo empaquetador rápido.
erasableSyntaxOnlyDesde 5.8Fuera de strictTS1294Prohíbe las construcciones de TypeScript que emiten código en ejecución: enums, namespaces, propiedades de parámetro y campos de clase con `declare`.
noUncheckedSideEffectImportsDesde 5.6Fuera de strictTS2882`import "./styles.css"` nunca se comprobaba que resolviera, así que una errata en uno era invisible.

