TypeScriptTypy narzędziowe
Readonly<Type>
Tworzy typ, w którym wszystkie właściwości są tylko do odczytu.
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
#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[]alboReadonlyArray<T>.
Powiązane hasła
#Widzisz błąd albo brakuje przykładu? Napisz do nas.