के रूप में @Vitaliy Ulantikov उत्तर दिया, आप उपयोग कर सकते हैं readonlyएक संपत्ति पर संशोधक। यह वास्तव में एक गेटर तरह कार्य करता है।
interface Point {
readonly x: number;
readonly y: number;
}
एक जब वस्तु शाब्दिक इंटरफ़ेस लागू करता है, तो आप एक ओवरराइट नहीं कर सकते readonlyसंपत्ति:
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
लेकिन जब एक वर्ग इंटरफ़ेस लागू करता है, वहाँ कोई रास्ता नहीं है उसे ओवरराइट से बचना है।
class PointClassBroken implements Point {
// these are required in order to implement correctly
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x
this.y = y
}
changeCoordinates(x: number, y: number): void {
this.x = x // no error!
this.y = y // no error!
}
}
मुझे लगता है कि ऐसा इसलिए है क्योंकि जब आप वर्ग परिभाषा फिर से घोषित संपत्तियों, वे इंटरफेस के गुणों को ओवरराइड, और केवल पढ़ने के लिए नहीं रह गया हैं।
कि ठीक करने के लिए, का उपयोग readonlyवर्ग है कि इंटरफ़ेस को लागू करता है में सीधे गुणों पर
class PointClassFixed implements Point {
readonly x: number;
readonly y: number;
constructor(x: number, y: number) {
this.x = x
this.y = y
}
changeCoordinates(x: number, y: number): void {
this.x = x // error!
this.y = y // error!
}
}
स्वयं देखें में खेल का मैदान ।