0Pricing
TypeScript Academy · Lekcja

Słowo kluczowe as do asercji typów

Celowo zastępuj wnioskowane typy za pomocą as

Słowo kluczowe as do asercji typów to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 1 z 4. 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 4 lekcji w sumie.

Czym jest asercja typu

Asercja typu informuje kompilator: „zaufaj mi, wiem, że ta wartość ma typ T”. Używa się do tego słowa kluczowego as: value as Type. Zmienia ono sposób, w jaki sprawdzanie typów interpretuje wartość, ale nie zmienia samej wartości.

const raw: unknown = 'hello world';
const text = raw as string;
console.log(text.toUpperCase());

Składnia as

Najpierw należy zapisać wyrażenie, następnie as, a potem typ docelowy. Istnieje również starsza składnia z nawiasami ostrymi, ale preferuje się as, ponieważ działa wszędzie, także w plikach JSX/TSX.

const value: unknown = 42;
const n = value as number;
console.log(n + 8);

Asercje nie zmieniają działania w czasie wykonywania

To kluczowa informacja: asercje są instrukcjami działającymi wyłącznie podczas kompilacji. Są usuwane podczas uruchamiania kodu. Nie zachodzi żadna konwersja ani sprawdzanie — jeśli asercja jest błędna, wartość w czasie działania programu pozostaje niezmieniona i może powodować nieprawidłowe działanie.

const v: unknown = 'not a number';
const n = v as number; // compiles, but v is still a string
console.log(typeof n); // 'string' at runtime!

Kiedy asercje są prawidłowe

TypeScript zezwala tylko na bezpośrednie asercje między typami, które się pokrywają — czyli gdy jeden z nich można przypisać do drugiego. Można zastosować asercję z unknown do string albo rozszerzać i zawężać typy w ramach istniejącej relacji.

const u: unknown = 'ok';
const s = u as string; // valid: unknown overlaps everything
const broad = s as string | number; // valid widening
console.log(s, broad);

Nieprawidłowe asercje bezpośrednie

Jeśli dwa typy nie mają ze sobą nic wspólnego, TypeScript odrzuca bezpośrednią asercję jako prawdopodobny błąd. Na przykład bezpośrednia asercja typu string do number jest blokowana.

const s = 'hello';
// const n = s as number; // Error: neither type sufficiently overlaps
console.log('Direct unrelated assertions are blocked');

Zawężanie unii za pomocą as

Częstym prawidłowym zastosowaniem jest asercja wartości unii do jednego z jej składników, gdy dostępna jest wiedza, której brakuje kompilatorowi. Należy robić to oszczędnie — sprawdzenie w czasie działania programu jest zwykle bezpieczniejsze.

type Shape = { kind: 'circle'; r: number } | { kind: 'square'; s: number };
const data: Shape = { kind: 'circle', r: 5 };
const circle = data as { kind: 'circle'; r: number };
console.log(circle.r);

Asercje typów elementów DOM

Klasyczny przykład z praktyki: zapytania DOM zwracają szeroki typ, taki jak HTMLElement | null. Gdy znany jest konkretny element, można zastosować do niego asercję, aby uzyskać dostęp do właściwości specyficznych dla tego elementu.

// document.getElementById returns HTMLElement | null
// const input = document.getElementById('email') as HTMLInputElement;
// console.log(input.value);
console.log('Assert HTMLElement to HTMLInputElement for .value');

Dlaczego potrzebne są asercje DOM

Interfejsy DOM nie wiedzą, jaki konkretny element zostanie znaleziony, dlatego zwracają typy ogólne. Asercja konkretnego podtypu, na przykład HTMLInputElement, udostępnia właściwości takie jak value czy checked.

// const canvas = document.querySelector('#c') as HTMLCanvasElement;
// const ctx = canvas.getContext('2d');
console.log('querySelector returns Element | null; assert to specialize');

Asercje const są przypadkiem szczególnym

Element as const został już omówiony. Jest to specjalna asercja, która nadaje wartości głęboką niezmienność i typy literałowe. To jedyna asercja, która jest zawsze bezpieczna, ponieważ tylko zawęża typ.

const tuple = [1, 2, 3] as const;
// type: readonly [1, 2, 3]
console.log(tuple.length);

Asercje omijają mechanizmy bezpieczeństwa

Ponieważ asercje nakazują kompilatorowi zaprzestać sprawdzania, przenoszą odpowiedzialność na programistę. Nieprawidłowa asercja może ukryć rzeczywisty błąd typu, który ujawni się dopiero jako awaria w czasie działania programu. Należy używać asercji tylko wtedy, gdy rzeczywiście wiadomo więcej niż kompilator.

const data: unknown = { id: 1 };
const user = data as { id: number; name: string };
// name does not exist at runtime
console.log(user.name); // undefined, no compile error

Zamiast asercji preferuj zawężanie

Jeśli to możliwe, należy preferować zawężanie w czasie działania programu (za pomocą strażników typu) zamiast asercji. Zawężanie dowodzi typu, a asercja tylko go deklaruje. as należy zachować dla przypadków, których nie da się wyrazić za pomocą zawężania, takich jak specjalizacja elementów DOM.

function safe(v: unknown): number {
  if (typeof v === 'number') return v; // proven
  return 0;
}
console.log(safe(10), safe('x'));

Szybkie sprawdzenie

Sprawdź zrozumienie asercji typów.

Podsumowanie: asercje as

W tym rozdziale poznano, że:

  • value as Type nakazuje kompilatorowi traktować wartość jako określony typ.
  • Asercje działają wyłącznie podczas kompilacji — nie wykonują konwersji ani sprawdzania w czasie działania programu.
  • Są dozwolone tylko między typami, które się pokrywają.
  • Typowe prawidłowe zastosowania to zawężanie unknown i specjalizowanie typów elementów DOM. Jeśli to możliwe, należy preferować zawężanie.

Następnie omówimy operator asercji niebędącej null.

const raw: unknown = 'data';
const s = raw as string;
console.log(s.length);

Często zadawane pytania

Czy lekcja „Słowo kluczowe as do asercji typów” jest bezpłatna?

Tak — pełny tekst „Słowo kluczowe as do asercji typów” 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 4 lekcji w sumie.

Co nauczysz się w „Słowo kluczowe as do asercji typów”?

Celowo zastępuj wnioskowane typy za pomocą as Ć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 4.

Ile czasu zajmuje lekcja „Słowo kluczowe as do asercji typów”?

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. Słowo kluczowe as do asercji typów
  2. Operator asercji non-null
  3. Podwójne asercje i związane z nimi ryzyko
  4. Asercje a strażnicy typów
← Powrót do TypeScript Academy