I have a simple class, and I want to assign a value to a readonly property in a method initiated by the constructor, but it says [ts] Cannot assign to 'readOnlyProperty' because it is a constant or a read-only property.
Why can't I assign a value to the property even though I am calling process
from the constructor?
Sample Code:
class C {
readonly readOnlyProperty: string;
constructor(raw: string) {
this.process(raw);
}
process(raw: string) {
this.readOnlyProperty = raw; // [ts] Cannot assign to 'readOnlyProperty' because it is a constant or a read-only property.
}
}
I usually use this workaround.
private _myValue = true
get myValue (): boolean { return this._myValue }
Now you can change the property from within the class and the property is readonly from the outside. One advantage of this workaround is that you can refactor your property names without generating errors. That's why I wouldn't use something like this (this as any).readOnlyProperty = raw
.
Instead of "casting" this as any
, you can still enforce type checking by modifying just this property:
(this.readOnlyProperty as string) = raw; // OK
(this.readOnlyProperty as string) = 5; // TS2322: Type '5' is not assignable to type 'string'.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With