tsconfig
Jedna strona na opcję. Każda niesie fragment skompilowany dwa razy, raz z opcją wyłączoną i raz z włączoną, oraz dokładne diagnostyki, które dał każdy przebieg — sprawdzone przez build, nie przez nas.
Każde „przed” i „po” na tych stronach jest kompilowane obiema drogami w czasie builda
Zakres to opcje zmieniające to, co akceptuje kontrola typów. Opcje emisji — target, module, jsx, declaration — zmieniają to, co wychodzi, a nie to, co jest dozwolone; dowodzenie ich znaczy porównywanie wygenerowanego JavaScriptu, co jest innym weryfikatorem i tego tu jeszcze nie ma. Strony sprawdzone do połowy są gorsze niż nieobecne.
Pod strict
strictOd 2.3TS18047Nie tyle opcja, co abonament: włącza osiem innych kontroli i włącza też te dodane już po tym, jak napisałeś swój tsconfig.
strictNullChecksOd 2.0W strictTS18047Bez niej `null` i `undefined` należą do każdego typu, więc `string` po cichu znaczy „string albo zupełnie nic”.
noImplicitAnyOd 1.6W strictTS7006Parametr, którego kompilator nie potrafi wywnioskować, staje się `any` — ta flaga każe mu o tym powiedzieć.
strictFunctionTypesOd 2.6W strictTS2322Funkcja przyjmująca mniej nie może zastąpić tej, która musi przyjąć więcej — oczywiste, gdy się to powie, i niesprawdzane bez tej flagi.
strictBindCallApplyOd 3.2W strictTS2345Bez niej ta trójka przyjmuje dowolne argumenty, bo ich zadeklarowane typy mówią `any[]`.
strictPropertyInitializationOd 2.7W strictTS2564Deklaracja `token: string` mówi, że właściwość jest stringiem. Przed tą flagą nic nie sprawdzało, czy kiedykolwiek nim została.
noImplicitThisOd 2.0W strictTS2683Wewnątrz zwykłej funkcji zagnieżdżonej `this` nie jest obiektem, w którym ją napisałeś — a bez tej flagi jest po cichu `any`.
useUnknownInCatchVariablesOd 4.4W strictTS18046JavaScript może rzucić cokolwiek — string, undefined, liczbę — więc przechwycona wartość jest `unknown`, a nie `any`.
Poprawność, poza strict
noUncheckedIndexedAccessOd 4.1Poza strictTS2322Odczyt klucza, którego nigdy nie zapisano, daje `undefined` w czasie wykonania. To flaga, która mówi o tym w typie.
exactOptionalPropertyTypesOd 4.4Poza strictTS2375`{ retries?: number }` normalnie dopuszcza też `{ retries: undefined }`. Ta flaga sprawia, że znak zapytania znaczy wyłącznie „może nie być”.
noPropertyAccessFromIndexSignatureOd 4.2Poza strictTS4111Rezerwuje `obj.key` dla właściwości faktycznie zadeklarowanych i spycha wszystko z sygnatury indeksowej do `obj["key"]`.
noImplicitOverrideOd 4.3Poza strictTS4114Wymaga słowa kluczowego `override` przy każdym składniku, który zastępuje ten z klasy bazowej.
Martwy kod i nieużywane nazwy
noImplicitReturnsOd 2.0Poza strictTS7030Funkcja, w której część gałęzi zwraca wartość, a inne wypadają na koniec, to prawie zawsze brakujący przypadek.
noFallthroughCasesInSwitchOd 1.8Poza strictTS7029Sygnalizuje `case`, który coś robi, a potem wpada w następny — nadal pozwalając na celowe puste przejście.
noUnusedLocalsOd 2.0Poza strictTS6133Nieodczytana zmienna lokalna to zwykle pozostałość po zmianie doprowadzonej tylko do połowy.
noUnusedParametersOd 2.0Poza strictTS6133Zgłasza parametry zadeklarowane i nigdy nieodczytane; wiodące podkreślenie to udokumentowany sposób powiedzenia, że tak miało być.
allowUnreachableCodeOd 1.8Poza strictTS7027Ustaw na `false` — domyślnie tylko ostrzega w edytorze, a ostrzeżenie to nie awaria builda.
allowUnusedLabelsOd 1.8Poza strictTS7028Nieużywana etykieta zwykle wcale nie jest etykietą — to literał obiektu albo adnotacja typu, które się tak sparsowały.
Moduły i kształt emisji
verbatimModuleSyntaxOd 5.0Poza strictTS1484Import używany wyłącznie jako typ musi być zapisany jako `import type`, żeby wyemitowany JavaScript był tym, co pokazuje źródło.
isolatedModulesOd 1.5Poza strictTS1205Odrzuca konstrukcje, których nie da się poprawnie skompilować bez zaglądania do innych plików — a tak kompiluje każdy szybki bundler.
erasableSyntaxOnlyOd 5.8Poza strictTS1294Zakazuje konstrukcji TypeScriptu emitujących kod wykonawczy — enumów, przestrzeni nazw, właściwości parametrów, pól klasy z `declare`.
noUncheckedSideEffectImportsOd 5.6Poza strictTS2882`import "./styles.css"` nigdy nie było sprawdzane pod kątem rozwiązania, więc literówka w nim była niewidoczna.

