मैंने किसी चीज़ का सिर्फ एक समय के हर संपत्ति के लिए एक इंटरफेस को परिभाषित कर सकते हैं?

वोट
0

यहाँ मेरी संपत्ति जहां इंटरफ़ेस कई बार परिभाषित किया जाता है:

    ExamStatusId = {
        All: <IEnumElement>{
            id: this.examStatusSelectId,
            text: 'Exam Status: All',
            val: 0
        },
        Current: <IEnumElement>{
            id: this.examStatusSelectId,
            text: 'Exam Status: Current',
            val: 1
        }
    }

यहां इंटरफ़ेस मेरे पास है बताया गया है:

interface IEnumElement {
    elem: string;
    text: string;
    val: number
}

वहाँ किसी भी तरह से है कि मैं ExamStatusId के हर संपत्ति के बाद इंटरफेस निर्दिष्ट करने के लिए होने से बचने कर सकते हैं?

16/07/2014 को 18:20
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

आप शामिल नहीं किया है elemसंपत्ति है, तो आप ऐसा करने के लिए (हालांकि यह स्पर्शरेखा है) की जरूरत है।

मेरे सिफारिश है कि आप प्रकार निष्कर्ष के आश्चर्य को गले लगाने के लिए, और यह कर रहा है:

interface IEnumElement {
    elem: string;
    text: string;
    val: number
}

class Exam {
    private examStatusSelectId: number;

    ExamStatusId = {
        All: {
            id: this.examStatusSelectId,
            elem: '',
            text: 'Exam Status: All',
            val: 0
        },
        Current: {
            id: this.examStatusSelectId,
            elem: '',
            text: 'Exam Status: Current',
            val: 1
        }
    }
}

// This function must be passed an IEnumElement
function example(element: IEnumElement) {

}

var exam = new Exam();

// The compiler knows this is good
example(exam.ExamStatusId.All);

आप सही गुण शामिल नहीं किया था, तो जब आप घोषित ExamStatusIdअपनी कक्षा पर संपत्ति, संकलक सही ढंग से समस्या का पता लगाने और इसके बारे में आपको बता, क्योंकि यह सबसे अच्छा में आम प्रकार की तुलना करेंगे होगा ExamStatusIdसाथ IEnumElementइंटरफेस (इसलिए भले ही आप केवल याद elemएक के बंद, आप चेतावनी प्राप्त होगी।

16/07/2014 को 18:56
का स्रोत उपयोगकर्ता

वोट
1

हाँ है कि नीचे दिए गए कोड की तरह एक अतिरिक्त इंटरफेस के साथ संभव है। सामान्य IIndexable इंटरफ़ेस यह भी अलग-अलग स्थानों पर उपयोग करने के लिए आसान बनाता है!

interface IEnumElement {
    elem: string;
    text: string;
    val: number
}

interface IIndexable<T> {
    [index: string]: T;
}

var ExamStatusId: IIndexable<IEnumElement>  = {
    All: {
        elem: "",
        text: 'Exam Status: All',
        val: 0
    },
    Current: {
        elem: "asdf",
        text: 'Exam Status: Current',
        val: 1
    }, 
    X:  {} // this is now an error!
}

संपादित करें: इंटरफ़ेस का उपयोग कर के बारे में अच्छी बात यह है कि आप स्वतः पूर्ण भी मिल जाएगा है!

16/07/2014 को 18:32
का स्रोत उपयोगकर्ता

वोट
0

उद्देश्य पर निर्भर करता है। जैसा कि नीचे दिखाया उद्देश्य जब वस्तु के सदस्यों तक पहुँचने IntelliSense + प्रकार की जाँच प्राप्त करना है तो:

यहाँ छवि विवरण दर्ज

और आप IntelliSense + प्रकार की जाँच जब व्यक्तिगत सदस्यों बनाने हैं:

यहाँ छवि विवरण दर्ज

तो फिर समाधान आप सबसे अच्छा एक मैं के बारे में सोच सकते हैं।

17/07/2014 को 00:40
का स्रोत उपयोगकर्ता

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