Asercje const z użyciem as const
Zamrażaj obiekty i tablice jako głęboko readonly typy literałów
Asercje const z użyciem as const to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 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.
Asercja as const
Asercja const, zapisywana jako as const, nakazuje TypeScriptowi wywnioskować najbardziej szczegółowy, głęboko readonly typ wartości. Właściwości obiektów stają się literałowe i niezmienne, a tablice stają się krotkami tylko do odczytu.
const point = { x: 10, y: 20 } as const;
// type: { readonly x: 10; readonly y: 20 }
console.log(point.x, point.y);Bez as const
Bez tej asercji właściwości obiektu są rozszerzane. Zapis { x: 10 } skutkuje wywnioskowaniem x: number, a właściwość można modyfikować. Porównaj to z poprzednią sceną, aby zobaczyć, co zmienia as const.
const a = { x: 10 }; // x: number, mutable
const b = { x: 10 } as const; // x: 10, readonly
a.x = 99; // allowed
console.log(a.x, b.x);Utrwalanie właściwości jako literałów
as const zmienia każdą właściwość typu string na jej typ literałowy. Jest to niezwykle przydatne w przypadku obiektów konfiguracji, których klucze i wartości muszą zachować dokładne typy.
const config = {
env: 'production',
retries: 3
} as const;
// env: 'production', retries: 3
console.log(config.env, config.retries);readonly zapobiega modyfikacjom
Ponieważ as const nadaje właściwościom modyfikator readonly, kompilator blokuje ponowne przypisywanie wartości. Wartość jest niezmienna na poziomie typów, co chroni ją przed przypadkowymi zmianami.
const settings = { mode: 'dark' } as const;
console.log(settings.mode);
// settings.mode = 'light'; // Error: readonly propertyAsercje const dla tablic
Zastosowane do tablicy as const tworzy krotkę tylko do odczytu złożoną z typów literałowych. Długość jest stała, a każdy element zachowuje swoją dokładną wartość.
const colors = ['red', 'green', 'blue'] as const;
// type: readonly ['red', 'green', 'blue']
console.log(colors[0], colors.length);Brak modyfikacji tablic tylko do odczytu
Krotka tylko do odczytu odrzuca metody modyfikujące, takie jak push, oraz przypisywanie wartości do indeksów. Dane są zablokowane, co jest dokładnie tym, czego potrzebują stałe tabele odnośników.
const days = ['Mon', 'Tue', 'Wed'] as const;
console.log(days.join(', '));
// days.push('Thu'); // Error: push does not exist on readonly tupleWyprowadzanie unii za pomocą typeof arr[number]
To bardzo przydatny wzorzec: z tablicy readonly można wyprowadzić unię typów jej elementów za pomocą typeof arr[number]. Wartości zapisujesz tylko raz, a literałową unię typów otrzymujesz automatycznie.
const ROLES = ['admin', 'editor', 'viewer'] as const;
type Role = typeof ROLES[number];
// 'admin' | 'editor' | 'viewer'
const r: Role = 'editor';
console.log(r);Jedno źródło prawdy
Dzięki temu tablica używana w czasie działania programu i typ pozostają zsynchronizowane. Dodanie wartości do tablicy automatycznie aktualizuje unię — nie trzeba utrzymywać zduplikowanych list.
const SIZES = ['S', 'M', 'L', 'XL'] as const;
type Size = typeof SIZES[number];
function pick(s: Size): void {
console.log('Picked', s);
}
pick('M');Asercje const dla krotek
W przypadku krotek, których elementy mają różne typy, as const zachowuje zarówno dokładne typy, jak i kolejność elementów, tworząc precyzyjną krotkę tylko do odczytu.
const pair = [1, 'one'] as const;
// type: readonly [1, 'one']
console.log(pair[0], pair[1]);Głębokie działanie readonly
as const działa głęboko. Zagnieżdżone obiekty i tablice również stają się strukturami tylko do odczytu z typami literałowymi — aż do najniższego poziomu.
const data = {
name: 'app',
tags: ['a', 'b']
} as const;
// tags is readonly ['a', 'b']
console.log(data.name, data.tags[1]);Asercje const jako alternatywa dla enum
Obiekt const wraz z wyprowadzoną unią typów jest lekką alternatywą dla enum. Otrzymujesz wartości literałowe w czasie działania programu oraz dokładny typ, bez żadnego dodatkowego wygenerowanego kodu.
const Status = {
Idle: 'idle',
Active: 'active'
} as const;
type Status = typeof Status[keyof typeof Status];
const s: Status = Status.Active;
console.log(s);Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat asercji const.
Podsumowanie: as const
Nauczyli się Państwo, że as const:
- Wyprowadza najbardziej szczegółowy, głęboko readonly typ literałowy.
- Zmienia właściwości obiektów w literałowe pola tylko do odczytu.
- Zmienia tablice w krotki tylko do odczytu złożone z literałów.
- Umożliwia wyprowadzanie unii za pomocą
typeof arr[number], dzięki czemu wartości i typy pozostają zsynchronizowane.
W następnym kroku połączymy literały w opisowe unie typów.
const LEVELS = ['low', 'mid', 'high'] as const;
type Level = typeof LEVELS[number];
const chosen: Level = 'mid';
console.log(chosen);Często zadawane pytania
Czy lekcja „Asercje const z użyciem as const” jest bezpłatna?
Tak — pełny tekst „Asercje const z użyciem as const” 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 „Asercje const z użyciem as const”?
Zamrażaj obiekty i tablice jako głęboko readonly typy literałów Ć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 4.
Ile czasu zajmuje lekcja „Asercje const z użyciem as const”?
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
- Typy literałów stringów i liczb
- Literały boolean i wnioskowanie typów literałów
- Asercje const z użyciem as const
- Łączenie literałów w unie