2016-03-19 10 views
5

के सभी सार्वजनिक गुणों को सूचीबद्ध करना चाहता हूं टाइपस्क्रिप्ट का उपयोग करके हम कक्षाओं और उनके सार्वजनिक गुणों को परिभाषित कर सकते हैं। मैं कक्षा के लिए परिभाषित सभी सार्वजनिक गुणों की सूची कैसे प्राप्त कर सकता हूं।मैं कक्षा/इंटरफेस

class Car { 
    model: string; 
} 

let car:Car = new Car(); 
Object.keys(car) === []; 

वहाँ कार अपने model संपत्ति का उत्सर्जन करने के लिए एक तरीका है?

+2

यह पहले से ही उत्तर दिया गया है ('हैऑनप्रॉपर्टी' का उपयोग करें): https://stackoverflow.com/questions/35691858/typescript-hasownproperty-equivalent और 'typeof' ऑपरेटर https://developer.mozilla.org/en -US/दस्तावेज़/वेब/जावास्क्रिप्ट/संदर्भ/ऑपरेटर/टाइप –

+1

रनटाइम पर 'सार्वजनिक' और 'निजी' सदस्य समान दिखते हैं, इसलिए मुझे नहीं लगता कि सार्वजनिक एपीआई जैसा वर्णन करना संभव है। – Aaron

उत्तर

-3

अपडेट किया गया जवाब (भी अंतिम जे एस सार्वजनिक/निजी पर क्रेन पागल का जवाब है, जो मेरा उत्तर को संबोधित नहीं करता देखें):

class Vehicle { 
    axelcount: number; 
    doorcount: number; 

    constructor(axelcount: number, doorcount: number) { 
     this.axelcount = axelcount; 
     this.doorcount = doorcount; 
    } 

    getDoorCount(): number { 
     return this.doorcount; 
    } 
} 

class Trunk extends Vehicle { 
    make: string; 
    model: string; 

    constructor() { 
     super(6, 4); 
     this.make = undefined; // forces property to have a value 
    } 

    getMakeAndModel(): string { 
     return ""; 
    } 
} 

उपयोग:

let car:Trunk = new Trunk(); 
car.model = "F-150"; 

for (let key in car) { 
    if (car.hasOwnProperty(key) && typeof key !== 'function') { 
     console.log(key + " is a public property."); 
    } else { 
     console.log(key + " is not a public property."); 
    } 

} 

आउटपुट:

axelcount is a public property. 
doorcount is a public property. 
make is a public property. 
model is a public property. 
constructor is not a public property. 
getMakeAndModel is not a public property. 
getDoorCount is not a public property. 

पिछला उत्तर:

class Car { 
    model: string; 
} 

let car:Car = new Car(); 

for (let key in car) { 
    // only get properties for this class that are not functions 
    if (car.hasOwnProperty(key) && typeof key !== 'function') { 
    // do something 
    } 
} 
+5

यह कोड गलत है। 'Key' का प्रकार कभी भी 'फ़ंक्शन' नहीं होगा, और 'हैऑनप्रोपर्टी' प्रोटोटाइप से प्राप्त गुणों को बहिष्कृत करेगा। इसमें घोषित लेकिन अपरिभाषित गुण भी शामिल नहीं हैं, और निजी या संरक्षित गुणों को शामिल नहीं करते हैं। –

2

जैसा कि हारून ने पहले ही टिप्पणी में उल्लेख किया है, सार्वजनिक और निजी सदस्य जावास्क्रिप्ट में समान दिखते हैं, इसलिए उनके बीच अंतर करने की कोई विधि नहीं हो सकती है। उदाहरण के लिए, टाइपप्रति कोड निम्नलिखित

class Car { 
    public model: string; 
    private brand: string; 

    public constructor(model:string , brand: string){ 
     this.model = model; 
     this.brand = brand; 
    } 
}; 

को संकलित किया गया है:

var Car = (function() { 
    function Car(model, brand) { 
     this.model = model; 
     this.brand = brand; 
    } 
    return Car; 
}()); 
; 

आप संकलित जावास्क्रिप्ट संस्करण में, देख सकते हैं, वहाँ बिल्कुल सदस्यों model और brand, घटना में कोई अंतर नहीं है, हालांकि है उनमें से एक निजी है और दूसरा सार्वजनिक है।

आप कुछ नामकरण सम्मेलन का उपयोग करके निजी और सार्वजनिक सदस्यों के बीच अंतर कर सकते हैं (उदाहरण के लिए, public_member और __private_member)।