0Pricing
TypeScript Academy · Lekcja

Tablice tylko do odczytu i niezmienne dane

Proszę używać ReadonlyArray, aby zapobiegać przypadkowym modyfikacjom.

Tablice tylko do odczytu i niezmienne dane to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 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.

Wprowadzenie

Zmiennymi tablicami można przypadkowo modyfikować w dowolnym miejscu kodu. ReadonlyArray i modyfikator readonly w TypeScript pomagają wymuszać niezmienność.

Modyfikator readonly dla tablic

Należy dodać modyfikator `readonly` przed typem tablicy, aby zapobiec jej modyfikowaniu. Tablicę można odczytywać, ale nie można jej zmieniać.
const ids: readonly number[] = [1, 2, 3];
// ids.push(4);   // Error
// ids[0] = 99;   // Error
console.log(ids[0]); // OK — reading is fine

Forma generyczna ReadonlyArray<T>

`ReadonlyArray` jest generycznym odpowiednikiem `readonly T[]`. Obie formy uniemożliwiają użycie push, pop, splice oraz przypisywania wartości za pomocą indeksu.
const names: ReadonlyArray<string> = ['Alice', 'Bob'];
// names.push('Charlie'); // Error

Zwracanie tablic tylko do odczytu z funkcji

Należy zwracać z funkcji tablice tylko do odczytu, aby zasygnalizować wywołującym, że wyniku nie należy modyfikować.
function getConfig(): readonly string[] {
  return ['host', 'port', 'db'];
}

Niemutowalne parametry funkcji

Parametry tablicowe należy oznaczać jako readonly, aby zapobiec modyfikowaniu przez funkcję tablicy należącej do kodu wywołującego.
function sum(nums: readonly number[]): number {
  return nums.reduce((a, b) => a + b, 0);
  // nums.push(99); // Error inside function
}

as const dla tablic literałowych

Asercja `as const` sprawia, że tablica staje się tablicą tylko do odczytu, i wywnioskowuje typ krotki z literałowymi typami elementów zamiast typów rozszerzonych.
const colors = ['red', 'green', 'blue'] as const;
// type: readonly ['red', 'green', 'blue']
// colors.push('yellow'); // Error

Readonly nie zamraża elementów głęboko

readonly zapobiega wyłącznie modyfikowaniu referencji do tablicy. Jeśli elementami są obiekty, ich właściwości nadal można zmieniać.
const users: readonly { name: string }[] = [{ name: 'Alice' }];
// users.push({}); // Error
users[0].name = 'Bob'; // Allowed — object itself is mutable

Głęboka niezmienność za pomocą Readonly<T>

Aby zapewnić głęboką niezmienność obiektów, należy połączyć ReadonlyArray z Readonly dla elementów. Można też użyć biblioteki takiej jak immer.
type ImmutableUser = Readonly<{ name: string; scores: readonly number[] }>;
const u: ImmutableUser = { name: 'Alice', scores: [90, 85] };
// u.name = 'Bob';       // Error
// u.scores.push(100);  // Error

Przypisywanie tablic zmiennych i tylko do odczytu

Tablicy tylko do odczytu NIE można przypisać do typu tablicy zmiennej. Chroni to przed przypadkowym przekazaniem niezmiennej tablicy tam, gdzie oczekiwane jest jej modyfikowanie.
const ro: readonly number[] = [1, 2];
const mutable: number[] = ro; // Error!

Kiedy używać tablic tylko do odczytu

Tablic tylko do odczytu należy używać dla obiektów konfiguracyjnych, stałych, parametrów funkcji, których funkcja zobowiązuje się nie modyfikować, oraz wartości zwracanych przez funkcje czyste.

Spread tworzy nową zmienną tablicę

Użycie spread dla tablicy tylko do odczytu w nowym literału tablicowym tworzy zmienną kopię. Jest to przejrzysty sposób wprowadzania zmian bez modyfikowania oryginału.
const base: readonly number[] = [1, 2, 3];
const extended: number[] = [...base, 4]; // new mutable array

Szybkie sprawdzenie

Która operacja NIE jest dozwolona dla `readonly number[]` w TypeScript?

Podsumowanie

Aby zapobiegać modyfikowaniu tablic, należy używać `readonly T[]` lub `ReadonlyArray`. `as const` służy do tworzenia stałych tablic literałowych. Spread tworzy zmienną kopię, gdy trzeba rozszerzyć tablicę tylko do odczytu.

Często zadawane pytania

Czy lekcja „Tablice tylko do odczytu i niezmienne dane” jest bezpłatna?

Tak — pełny tekst „Tablice tylko do odczytu i niezmienne dane” 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 „Tablice tylko do odczytu i niezmienne dane”?

Proszę używać ReadonlyArray, aby zapobiegać przypadkowym modyfikacjom. Ć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 2 z 4.

Ile czasu zajmuje lekcja „Tablice tylko do odczytu i niezmienne dane”?

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. Typowane tablice: T[] i Array
  2. Tablice tylko do odczytu i niezmienne dane
  3. Krotki: typowane tablice o stałej długości
  4. Wyliczenia: stałe liczbowe i tekstowe
← Powrót do TypeScript Academy