0Pricing
TypeScript Academy · Lekcja

Funkcje asercji i strażnicy typów definiowani przez użytkownika

Pisanie funkcji asercji (asserts x is T) i definiowanych przez użytkownika strażników typów (x is T) do bezpiecznego zawężania wartości unknown/unii

Funkcje asercji i strażnicy typów definiowani przez użytkownika to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 z 3. 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 3 lekcji w sumie.

Wprowadzenie

Cel: Zamieniać sprawdzenia wykonywane w czasie działania na zawężenia typów za pomocą funkcji asercji i strażników typu zdefiniowanych przez użytkownika, aby tworzyć bezpieczne API.

Funkcja asercji

Funkcja asercji zawęża typy w dalszej części kodu, jeśli kończy się pomyślnym powrotem; w przeciwnym razie musi zgłosić wyjątek.

function assertIsString(x: unknown): asserts x is string {
  if (typeof x !== "string") {
    throw new Error("Expected string");
  }
}

let v: unknown = Math.random() > 0.5 ? "ok" : 42;
assertIsString(v); // after this, v is string
console.log(v.toUpperCase());

Funkcja strażnika typu

Strażnik typu zwraca x is T, umożliwiając inteligentne zawężanie typów w gałęziach i funkcjach pomocniczych.

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

function isCircle(s: Shape): s is Circle {
  return s.kind === "circle";
}

function area(s: Shape): number {
  if (isCircle(s)) {
    return Math.PI * s.radius ** 2; // s is Circle here
  }
  return s.size * s.size; // s is Square here
}

console.log(area({ kind: "circle", radius: 2 }));

Strażniki w filter

Strażniki mogą pełnić funkcję predykatów dla metod tablicowych, takich jak filter, aby przejrzyście zawężać typy elementów.

type Item = { id: number } | null | undefined;

function isPresent<T>(x: T | null | undefined): x is T {
  return x != null;
}

const items: Item[] = [{ id: 1 }, null, undefined, { id: 2 }];
const present = items.filter(isPresent);
// present has type { id: number }[]
console.log(present.map(i => i.id));

Asercja dla danych wykonywanych w czasie działania

Należy połączyć parsowanie z asercją, aby szybko wykryć błąd, gdy wartość nie ma oczekiwanego typu.

function parseJson(s: string): unknown {
  return JSON.parse(s);
}

try {
  const data = parseJson("{\"name\":\"Ada\"}");
  assertIsString(data); // will throw, because data is object
} catch (e) {
  console.log("Handled:", e instanceof Error ? e.message : e);
}

Wskazówki

Wskazówki:

  • Asercje muszą zgłaszać wyjątek w przypadku niepowodzenia.
  • W logice rozgałęzień należy preferować strażniki (x is T).
  • Asercji należy używać na granicach API (I/O, JSON, DOM).

Sprawdzenie funkcji asercji

Szybkie sprawdzenie: Co gwarantuje funkcja asercji z asserts x is string?

Podsumowanie

Podsumowanie: Należy używać funkcji asercji, aby wymuszać poprawne typy po sprawdzeniach, oraz strażników typu zdefiniowanych przez użytkownika, aby zawężać typy w gałęziach i kolekcjach.

Często zadawane pytania

Czy lekcja „Funkcje asercji i strażnicy typów definiowani przez użytkownika” jest bezpłatna?

Tak — pełny tekst „Funkcje asercji i strażnicy typów definiowani przez użytkownika” 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 3 lekcji w sumie.

Co nauczysz się w „Funkcje asercji i strażnicy typów definiowani przez użytkownika”?

Pisanie funkcji asercji (asserts x is T) i definiowanych przez użytkownika strażników typów (x is T) do bezpiecznego zawężania wartości unknown/unii Ć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 3 z 3.

Ile czasu zajmuje lekcja „Funkcje asercji i strażnicy typów definiowani przez użytkownika”?

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. Przeciążenia funkcji i sygnatury wywołania
  2. Typowanie parametru this; void i never
  3. Funkcje asercji i strażnicy typów definiowani przez użytkownika
← Powrót do TypeScript Academy