Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03321.jsonl.gz/1752

Wenn man TypeScript verwendet, gibt es eine Compiler-Option, die man auf jeden Fall immer einschalten sollte, nämlich
“strict”:true.
Dadurch wird direkt eine ganze handvoll weiterere Optionen aktiviert, die man im Notfall auch alle einzeln aktivieren könnte. Dazu gehören
alwaysStrict,
noImplicitAny,
noImplicitThis,
strictNullChecks,
strictBindCallApply,
strictFunctionTypes,
strictPropertyInitialization, und
useUnknownInCatchVariables. Diese fangen schonmal eine vielzahl von Fehler ab, bevor sie passieren.
Dann gibt es aber noch Optionen, die man zusätzlich noch immer separat aktivieren kann, die zum Teil aber nicht weniger wünschenswert sind. Zwei davon möchte ich nun noch etwas genauer beleuchten:
noUncheckedIndexedAccess
Hier spricht Code mehr als Worte:
Beide Fehler meldet TypeScript nur, wenn
noUncheckedIndexedAccess aktiviert ist. Deshalb empfehle ich diese zumindest für neue Projekte immer gleich zu aktivieren. Wenn man versucht dies nachträglich bei einem Projekt zu aktivieren, erlebt man oft sein blaues Wunder.
exactOptionalPropertyTypes
Wenn diese Option nicht aktiviert ist, dann kann man einer optionalen Property automatisch immer auch den Wert
undefined zuweisen. Dies wird dann zum Problem, wenn man anfängt Objekte mit optionalen Properties zu mergen, denn beim Mergen macht es einen grossen Unterschied ob eine Property nicht gesetzt ist, oder ob sie auf den Wert
undefined gesetzt ist.
Folgendes Beispiel soll verdeutlichen, dass dies zu gefährlichen Situationen führen kann:
Ohne die Option
exactOptionalPropertyTypes würde TypeScript den obigen Aufruf zu
runProgramzulassen und das würde wiederum dazu führen, dass
numberOfCores im options-Objekt
undefined ist, obwohl dies für den
Options-Typ eigentlich gar nicht zulässig ist. Es kann also durchaus sinnvoll sein die Option zu aktivieren.
Durch das Aktivieren der Option entstehen aber oft neue Probleme. Eines davon zum Beispiel hier:
Dies müsste man neu z.B. folgendermassen lösen: