TypeScript został pierwotnie zaprojektowany z myślą o maksymalnie płynnej migracji z JavaScript, dlatego domyślnie zmienne lub parametry bez wyraźnie określonego typu miały typ any. Ułatwiało to migrację, ale obniżało zalety statycznego typowania. W celu zwiększenia niezawodności i przewidywalności kodu zespół TypeScript wprowadził flagę kompilatora noImplicitAny, która wymaga jawnego określania typów lub umożliwia TypeScriptowi ich poprawne wydedukowanie.
Kiedy noImplicitAny jest wyłączony, deweloperzy mogą przypadkowo pominąć wyraźne określenie typu zmiennej, parametru lub wartości zwracanej funkcji. To sprawia, że kod jest mniej bezpieczny i utrudnia refaktoryzację: wszelkie błędy związane z typami nie są wykrywane w czasie kompilacji, a pojawiają się dopiero w czasie wykonywania.
Włączenie noImplicitAny w pliku tsconfig.json zmusza kompilator TypeScript do zgłaszania błędu przy każdym niejawnie używanym typie any. Wymaga to od deweloperów dokładnego podejścia do typów, sprawia, że procesy refaktoryzacji są mniej ryzykowne, a sam kod — bardziej niezawodny.
Przykład kodu:
// tsconfig.json { "compilerOptions": { "noImplicitAny": true } } // Przykład funkcji bez określenia typu parametru function printUser(user) { console.log(user.name); // Błąd kompilacji, jeśli nie określono typu } // Poprawnie: function printUser(user: { name: string }) { console.log(user.name); }
Kluczowe cechy:
Czy włączenie noImplicitAny zawsze zapobiega wszystkim potencjalnym błędom typów w projekcie?
Nie, ta flaga wyeliminowuje tylko niejawne any. Jawne użycie any wciąż jest dozwolone. Dla pełnej ochrony warto także ograniczyć jawne any przez linting i przeglądy.
Jeśli typ jest wydedukowany automatycznie, noImplicitAny nadal zgłasza błąd?
Nie, jeśli TypeScript był w stanie poprawnie wydedukować typ (na przykład przez inicjalizację), błędu nie będzie. Przykład:
let n = 123; // Typ number, nie any
Czy włączenie strict automatycznie włącza noImplicitAny?
Tak, flaga strict włącza wiele rygorystycznych kontroli, w tym noImplicitAny. Ale można ją ręcznie wyłączyć, jeśli zajdzie taka potrzeba.
W projekcie wyłączono noImplicitAny, większość obhandlerów API przyjmuje parametry bez wyraźnego typu. W trakcie wdrażania nowych logik biznesowych deweloperzy popełniają błędy w nazwach właściwości, ale błędy ujawniają się dopiero na produkcji.
Zalety:
Wady:
Po włączeniu noImplicitAny cały kod został stopniowo zrefaktoryzowany, niejawne any usunięto. Zaczęto używać edytora z podświetlaniem typów i autouzupełnianiem. Nowe błędy były natychmiast naprawiane na etapie kompilacji.
Zalety:
Wady: