Readonly<Type>

Tworzy typ, w którym wszystkie właściwości są tylko do odczytu.

Na tej stronie

Przykład

#
TypeScript
interface State {
  level: number
  exp: number
}

function levelUp(state: Readonly<State>): State {
  return { level: state.level + 1, exp: 0 }
}

const current: Readonly<State> = { level: 4, exp: 980 }
console.log(levelUp(current))
console.log(current)
Wynik
{ level: 5, exp: 0 }
{ level: 4, exp: 980 }

Definicja i zastosowanie

#

Readonly<Type> dodaje modyfikator readonly do każdego pola. Obiekt takiego typu można czytać, ale każda próba przypisania nowej wartości do pola kończy się błędem kompilacji.

To wygodny sposób na zaznaczenie, że funkcja nie zmienia przekazanego obiektu, albo na ochronę stanu aplikacji przed przypadkową mutacją.

Ochrona działa tylko na etapie kompilacji i tylko płytko. Zagnieżdżone obiekty nadal można modyfikować, a w działającym programie obiekt zmienisz bez przeszkód, chyba że użyjesz Object.freeze().

Składnia

#
Składnia
type Nowy = Readonly<Typ>

Parametry typu

#
  • Type

    typ obiektowy

    Typ, którego pola mają być tylko do odczytu.

Więcej przykładów

#
Próba mutacji
TypeScript
current.exp = 1000
// Błąd: Cannot assign to 'exp' because it is a read-only property.

Dobre praktyki

#
  • Oznaczaj parametry jako Readonly<T>, gdy funkcja nie powinna ich zmieniać. Kompilator wyłapie przypadkowe mutacje.
  • Do tablic użyj readonly T[] albo ReadonlyArray<T>.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.