0Pricing
TypeScript Academy · Lekcja

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 message

Guardy 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 noImplicitAny i najpierw napraw nowe błędy.
  • Wprowadź guardy dla danych wejściowych z zewnątrz.
  • Włącz strictNullChecks i jawnie obsłuż wartości undefined.
  • Śledź pozostałe użycia any za 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

  1. Eliminowanie any; preferowanie unknown i zawężania
  2. Stopniowe wymuszanie ścisłych flag
← Powrót do TypeScript Academy