यह टाइपप्रति इंटरफेस में getters / setters उपयोग करने के लिए संभव है?

वोट
29

मैं एक केवल पढ़ने के लिए संपत्ति के साथ एक इंटरफेस को परिभाषित करना चाहते हैं। उदाहरण के लिए;

interface foo {
    get bar():bool;
}

पट्टी पर, हालांकि, इस सिंटैक्स त्रुटि, देता है उम्मीद ''। मैं सेटअप मेरे VisualStudio ES5 लक्ष्य का उपयोग करने के, तो ही टिककर खेल का समर्थन कर रहे है। इस इंटरफेस की एक सीमा है? भविष्य में इस बदल सकता है; यह करने के लिए सक्षम होने के लिए एक बहुत अच्छी बात है।

11/10/2012 को 18:08
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
31

गेटर-केवल गुण में पेश किए गए टाइपप्रति 2.0 :

interface foo {
    readonly bar: boolean;
}
13/04/2017 को 11:09
का स्रोत उपयोगकर्ता

वोट
17

हाँ, यह इंटरफेस की एक सीमा है। या नहीं, संपत्ति के लिए उपयोग एक गेटर के साथ लागू किया गया है सार्वजनिक इंटरफ़ेस का हिस्सा नहीं होना चाहिए एक कार्यान्वयन विस्तार है और इस तरह। यह भी देखें इस सवाल का

यदि आप एक केवल पढ़ने के लिए विशेषता एक अंतरफलक में निर्दिष्ट की जरूरत है, तो आप एक गेटर विधि जोड़ सकते हैं:

interface foo {
    getAttribute() : string;
}
11/10/2012 को 19:16
का स्रोत उपयोगकर्ता

वोट
0

के रूप में @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!
    }
}

स्वयं देखें में खेल का मैदान

14/09/2018 को 05:03
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more