mirror of
https://github.com/alrayyes/wiki.git
synced 2024-11-25 13:06:22 +00:00
68 lines
1.3 KiB
Markdown
68 lines
1.3 KiB
Markdown
---
|
||
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<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
|
||
```
|