Eliminowanie any; preferowanie unknown i zawężania
Zastępowanie any przez unknown i zawężanie, dodawanie niewielkich strażników i funkcji asercji oraz stopniowe włączanie rygorystycznych flag bez przerywania kompilacji
Eliminowanie any; preferowanie unknown i zawężania to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 1 z 2. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 2 lekcji w sumie.
Wprowadzenie
Cel: Usuń miejsca użycia any. W przypadku niezaufanych wartości preferuj unknown i zawężaj typ za pomocą prostych sprawdzeń. Dodasz niewielkie guardy i będziesz stopniowo włączać flagi trybu ścisłego.
- any → unknown
- Zawężanie za pomocą typeof/in/instanceof
- Funkcje asercji
Pułapki any
any wyłącza bezpieczeństwo typów: nieprawidłowe struktury danych lub działania na łańcuchach znaków mogą przejść kompilację i zakończyć się błędem dopiero później.
// any hides bugs
function avgBad(values: any): number {
// Compiles even if values is not an array of numbers
return values.reduce((a: number, b: number) => a + b, 0) / values.length
}
// Runtime crash examples:
// avgBad(123)
// avgBad(["1","2"]) // string addition!unknown i zawężanie typu
Używaj unknown dla danych wejściowych pochodzących z zewnątrz. Zawężaj typ za pomocą Array.isArray i typeof, a następnie bezpiecznie wykonuj obliczenia.
// unknown forces checks
function avg(values: unknown): number {
if (!Array.isArray(values)) throw new Error("values must be an array")
const nums = values.filter((v): v is number => typeof v === "number")
if (nums.length === 0) throw new Error("no numbers")
const sum = nums.reduce((a, b) => a + b, 0)
return sum / nums.length
}
// avg([1,2,3]) → 2; avg("oops") throws early with a clear messageGuardy typów
Utwórz predykat x is T, aby czytelnie zawężać typ w kodzie wywołującym. Guardy powinny być małe i skupiać się na sprawdzaniu struktury.
// Small predicate to reuse narrowing
export type User = { id: string; name: string }
export function isUser(x: unknown): x is User {
return typeof x === "object" && x !== null
&& typeof (x as any).id === "string"
&& typeof (x as any).name === "string"
}
export function hello(x: unknown) {
if (!isUser(x)) throw new Error("invalid user")
return `Hello, ${x.name}`
}Funkcje asercji
Funkcje asercji (asserts x is T) zawężają typ po wykonaniu. Używaj ich do sprawdzania wymaganych warunków wstępnych i zgłaszaj wyjątki z jasnymi komunikatami.
// Assertion function throws or narrows
function assertUser(x: unknown): asserts x is { id: string; name: string } {
if (typeof x !== "object" || x === null) throw new Error("not an object")
const o = x as Record<string, unknown>
if (typeof o.id !== "string" || typeof o.name !== "string") throw new Error("bad user")
}
export function greetUnsafe(x: unknown) {
assertUser(x) // now x is narrowed after this call
return `Hi ${x.name}`
}Plan zwiększania restrykcyjności
Plan:
- Włącz
noImplicitAnyi najpierw napraw nowe błędy. - Wprowadź guardy dla danych wejściowych z zewnątrz.
- Włącz
strictNullChecksi jawnie obsłuż wartości undefined. - Śledź pozostałe użycia
anyza pomocą ESLint i stopniowo je ograniczaj.
Sprawdzenie unknown i any
Szybkie sprawdzenie: Dlaczego w przypadku niezaufanych danych należy preferować unknown zamiast any?
Podsumowanie
Podsumowanie: Zastępuj any typem unknown, dodawaj małe guardy lub asercje i stopniowo włączaj flagi trybu ścisłego, aby kompilacje nadal kończyły się powodzeniem.
Często zadawane pytania
Czy lekcja „Eliminowanie any; preferowanie unknown i zawężania” jest bezpłatna?
Tak — pełny tekst „Eliminowanie any; preferowanie unknown i zawężania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 2 lekcji w sumie.
Co nauczysz się w „Eliminowanie any; preferowanie unknown i zawężania”?
Zastępowanie any przez unknown i zawężanie, dodawanie niewielkich strażników i funkcji asercji oraz stopniowe włączanie rygorystycznych flag bez przerywania kompilacji Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 2.
Ile czasu zajmuje lekcja „Eliminowanie any; preferowanie unknown i zawężania”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Eliminowanie any; preferowanie unknown i zawężania
- Stopniowe wymuszanie ścisłych flag