Readonly
Introduction
TypeScript's type system allows you
to mark individual properties on
interfaces,
types and
class properties as
readonly
.
Examples
interface
function foo(config: { readonly bar: number; readonly bas: number }) {
// ..
}
let config = { bar: 123, bas: 123 }
foo(config)
// You can be sure that `config` isn't changed 🌹
type
type Foo = {
readonly bar: number
readonly bas: number
}
// Initialization is okay
let foo: Foo = { bar: 123, bas: 456 }
// Mutation is not
foo.bar = 456 // Error: Left-hand side of assignment expression cannot be a constant or a read-only property
class property
class Foo {
readonly bar = 1 // OK
readonly baz: string
constructor() {
this.baz = "hello" // OK
}
}
type Foo = {
bar: number
bas: number
}
type FooReadonly = Readonly<Foo>
let foo: Foo = { bar: 123, bas: 456 }
let fooReadonly: FooReadonly = { bar: 123, bas: 456 }
foo.bar = 456 // Okay
fooReadonly.bar = 456 // ERROR: bar is readonly