Constant vs readonly in typescript
Declaring a variable as readonly
will not allow us to override even if they are public properties.
How const beha
as said in https://www.typescriptlang.org/docs/handbook/interfaces.html#readonly-vs-const
The easiest way to remember whether to use readonly or const is to ask whether you’re using it on a variable or a property. Variables use const whereas properties use readonly.
as it displayed in below image if you declare const in defining a property you will get an error https://i.imgur.com/cJfDqh9.png
A const
variable cannot be re-assigned, just like a readonly
property.
Essentially, when you define a property, you can use readonly
to prevent re-assignment. This is actually only a compile-time check.
When you define a const
variable (and target a more recent version of JavaScript to preserve const
in the output), the check is also made at runtime.
So they effectively both do the same thing, but one is for variables and the other is for properties.
const x = 5;
// Not allowed
x = 7;
class Example {
public readonly y = 6;
}
var e = new Example();
// Not allowed
e.y = 4;
Important note... "cannot be re-assigned" is not the same as immutability.
const myArr = [1, 2, 3];
// Not allowed
myArr = [4, 5, 6]
// Perfectly fine
myArr.push(4);
// Perfectly fine
myArr[0] = 9;
both:
.push()
if array)const:
readonly:
I think the reason for both words is probably that it's easier to implement than the alternative.
In C++, for instance, classes can have const members. But C++ has special syntax to initialize the constants before the constructor is run, so there's never really any "assignment" to the const going on, like:
class TestClass {
const int _x;
TestClass(int x) : _x(x) {}
}
The _x(x) initializes the _x variable before the constructor is called.
In Typescript, if they wanted to allow members to be declared const and were serious about the variables being const, they would need to add similar syntax.
"readonly" isn't really the same as const. It means, I think, something slightly different. It means "allow assignment inside the constructor, but then no more."
One of the key difference between const and readonly is in how it works with the array. (appart form already ans diff) You have to use ReadonlyArray while working with Array, where T is generic type(google it for more).
when u declare any array as const, you can perform operations on array which may change the array elements. for ex.
const Arr = [1,2,3];
Arr[0] = 10; //OK
Arr.push(12); // OK
Arr.pop(); //Ok
//But
Arr = [4,5,6] // ERROR
But in case of ReadonlyArray you can not change the array as shown above.
arr1 : ReadonlyArray<number> = [10,11,12];
arr1.pop(); //ERROR
arr1.push(15); //ERROR
arr1[0] = 1; //ERROR