--- date: 2020-10-05 id: c0bc64a7-f2dc-4e2e-afb9-5dbc63eb8287 title: Readonly --- # Introduction [TypeScript's](20200929161126-typescript) type system allows you to mark individual properties on [interfaces](20200929162220-interfaces), [types](20200929163825-typescript_type_alias) and [class](20201009104411-typescript_classes) properties as `readonly`. # Examples ## interface ``` typescript 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 ``` typescript 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 ``` typescript class Foo { readonly bar = 1; // OK readonly baz: string; constructor() { this.baz = "hello"; // OK } } ``` ``` typescript type Foo = { bar: number; bas: number; } type FooReadonly = Readonly; 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 ```