2013-01-04 11 views
5

मेरे पास टाइपस्क्रिप्ट इंटरफ़ेस है। समस्या यह है कि इसमें लगभग 40 सदस्य हैं। जब मैं इसका उपयोग करता हूं और मैं केवल चुने हुए सदस्यों को लागू करता हूं तो मुझे एक त्रुटि मिलती है कि कुछ गायब हैं। इसे अनदेखा कैसे करें? क्या मुझे उन सभी को लागू करना है? यह मुद्दा मुझे एक प्रकार का कास्टिंग करने से रोकता है।सभी इंटरफ़ेस सदस्यों को लागू करें

उदा।

interface A { 
    // 40 members 
} 

class B implements A { 
    // only 5 members implemented 
} 

// somewhere in the code 
var myVar1: A = something; 
var myVar2: B = <B> myVar1; // here an error (can't convert because B has missing some properties and methods:/) 
+1

मुझे मिली सभी भाषाओं में इंटरफेस के लिए नियम यह है कि आपको अपने सभी तरीकों को लागू करना होगा। –

उत्तर

10

में 5 गुण से निपटने के लिए आप वैकल्पिक रूप आइटम चिह्नित कर सकते हैं चाहते हैं:

interface Person { 
    name: string; 
    address?: string; 
} 

नाम आवश्यक है और कार्यान्वयन के लिए पता वैकल्पिक है

+0

+1 - यह एक अच्छा सुझाव है। – Fenton

+1

आपको पूरे इंटरफ़ेस को लागू करना होगा लेकिन आप यहां दिखाए गए कुछ वैकल्पिक बना सकते हैं। हालांकि अगर आप वास्तव में कुछ लोगों को कभी-कभी लागू करना चाहते हैं लेकिन फिर दूसरी बार आप एक अलग सेट चाहते हैं, तो आप नीचे @SteveFenton शो के रूप में कुछ बना सकते हैं –

5

तुमसे वादा करता हूँ कि आप एक इंटरफ़ेस को लागू हैं, तो आप यह सब लागू करने के लिए की है।

एक समाधान एक आधार वर्ग कि 40 गुण लागू करता है करने के लिए हो सकता है अगर आप केवल टाइपप्रति में बी

interface A { 
    propA: string; 
    propB: string; 
} 

class C implements A { 
    public propA = ""; 
    public propB = ""; 
} 

class B extends C { 
    public propB = "Example"; 
} 

var myVar1: A; 
var myVar2: B = <B> myVar1; 
4

इंटरफ़ेस में 40 आइटम काफी हैं।

इसके अलावा, अगर आपको केवल एक निश्चित कक्षा के लिए 5 की आवश्यकता है तो यह एक डिजाइन समस्या को इंगित करता है।

एक वैकल्पिक डिजाइन कई संबंधित इंटरफेस रखना और गुणों को अधिक तार्किक समूहों में विभाजित करना है।

interface ICar ... 
interface IRacingCar : ICar 
interface IFlyingCar : ICar 
interface IFamilyCar : ICar 

तब आपके पास एक कक्षा हो सकती है जो वास्तव में कई इंटरफेस लागू करती है।

class RaceCar: IRacingCar ... 
class FlyingRaceCar: IRaceCar, IFlyingCar ... 
class FlyingFamilyCar: IFlyingCar, IFamilyCar ... 

इसके अलावा, आप एक अंतरफलक से एक विशिष्ट वर्ग के लिए कास्टिंग जब तक आप निश्चित वस्तु वास्तव में उस वर्ग है से बचना चाहिए। समस्या तब होगी जब आप उस वर्ग की विधि का उपयोग करने का प्रयास करते हैं जो वास्तव में मौजूद नहीं है यदि ऑब्जेक्ट वास्तव में उस प्रकार का नहीं है।

संबंधित मुद्दे