टाइपस्क्रिप्ट में एक विधि घोषणा में, पैरामीटर स्ट्रिंग्स, बूलियन, या संख्याओं के प्रकार सरणी का हो सकता है। क्या मुझे इसे किसी भी रूप में घोषित करना है [] या इन तीन प्रकारों के इनपुट प्रकार को सीमित करने का कोई तरीका है?क्या मैं पैरामीटर प्रकार को टाइपस्क्रिप्ट में किसी भी प्रकार के बजाय कई प्रकारों में से एक के रूप में निर्दिष्ट कर सकता हूं?
उत्तर
टाइपप्रति 1.4 शुरू की Union Types तो इस सवाल का जवाब अब हाँ, आप कर सकते हैं है।
function myFunc(param: string[] | boolean[] | number[]): void;
निर्दिष्ट किए गए विकल्पों की तुलना में अन्य प्रकार का उपयोग करने से संकलन-समय त्रुटि उत्पन्न हो जाएगी।
आप एक से अधिक विशिष्ट प्रकार की एक सरणी चाहते हैं, आप संघ के प्रकार है कि के लिए भी उपयोग कर सकते हैं:
function myFunc(param: (string|boolean|number)[]): void;
ध्यान दें कि यह क्या ओ पी के लिए कहा से अलग है। इन दो उदाहरणों के अलग-अलग अर्थ हैं।
आप समारोह का उपयोग कर सकते यह करने के लिए overloads:
class Thing {
public foo(x: number[]);
public foo(x: bool[]);
public foo(x: string[]);
public foo(x: any[]) {
// Note: You'll have to do type checking on 'x' manually
// here if you want differing behavior based on type
}
}
// Later...
var t = new Thing();
t.foo(someArray); // Note: External callers will not see the any[] signature
फ़ंक्शन ओवरलोड सहायता कर सकते हैं। – Amr
के बाद से तार, बूलियन्स और संख्या आदिम प्रकार मुझे नहीं लगता कि वहाँ एक आसान तरीका है। यदि आप विभिन्न ऑब्जेक्ट प्रकारों के सेट का उपयोग करेंगे, तो आप शायद एक सुपर क्लास के साथ आ सकते हैं और फिर अपनी विधि के इंटरफ़ेस में उस सुपर क्लास को निर्दिष्ट कर सकते हैं। दूसरी ओर, आप तारों, बूलियन और पूर्णांक के सरणी के लिए विभिन्न कार्यान्वयन निर्दिष्ट करने के लिए विधि ओवरलोडिंग का भी उपयोग कर सकते हैं।
सुपर क्लास काम कर सकती है, एक इन-लाइन प्रकार जिसमें सामान्य तरीके और गुण होते हैं। – Amr
नहीं। टाइपस्क्रिप्ट पैरामीटर में केवल एक वैकल्पिक प्रकार एनीोटेशन का समर्थन करता है, उदा। x: string
, संख्या या कोई भी, इसलिए आप अनुमत प्रकारों का एक सेट नहीं बता सकते हैं।
समारोह भार के मंगलाचरण के पैटर्न एक समारोह के द्वारा समर्थित की एक अधिक सटीक विनिर्देश की तुलना में एक भी हस्ताक्षर के साथ संभव है की अनुमति देते हैं:
हालांकि, टाइपप्रति समारोह भार के (प्रलेखन p51) का समर्थन करता है। [...]
function attr(name: string): string; function attr(name: string, value: string): Accessor; function attr(map: any): Accessor; function attr(nameOrMap: any, value: string): any { if (nameOrMap && typeof nameOrMap === "object") { // handle map case } else { // handle string case } }
Otherwsie आप typeof
प्रकार चेकों का उपयोग कर सकते हैं, लेकिन यह प्रकार स्क्रिप्ट एक छोटा सा के प्रकार ascpect काउंटरों।
function myFunc(x){
if(typeof x !== "string" && typeof x !== "object" && typeof x !== "number")
throw new TypeError("Unsupported type!");
}
मैं फ़ंक्शन ओवरलोड विचार से सहमत हूं लेकिन टाइपफ़ टाइप प्रकार इंटेलिजेंस में मदद नहीं करता है। मुझे लगता है कि मेरे प्रश्न का उत्तर नहीं है, लेकिन मेरे पास ऐसा उत्तर है जो वास्तव में मदद कर सकता है। मैं इसे पोस्ट करूंगा। – Amr
टाइपस्क्रिप्ट 1.4 के साथ उत्तर ** हाँ ** है। मेरा जवाब जांचें। – Joao
इसका समाधान करने के लिए एक अन्य तरीका इनपुट प्रकार के बीच आम तरीकों और गुण को खोजने और विधि घोषणा कि इन आम methos और गुण रखती में एक इन-लाइन प्रकार की घोषणा करने के लिए है। इस तरह:
methodName(param1: { prop1: number; prop2: string; }, param2: { propA: bool; propB: string; }): methodResultType;
इसमें कुछ समय पुराने सवाल लगता है, लेकिन वैसे भी, मैं इसे भर में आया था, और यह अन्य जवाब है कि मैं लाने याद किया।
टाइपप्रति 1.4 से लगता है कि वह इस तरह का समारोह पैरामीटर के लिए कई संभव प्रकार की घोषणा करने के लिए संभव है:
class UtilsClass {
selectDom(element: string | HTMLElement):Array<HTMLElement> {
//Here will come the "magic-logic"
}
}
इसका कारण यह है "संघ-प्रकार" के नए टाइपप्रति अवधारणा के है।
आप और अधिक here देख सकते हैं।
- 1. टाइपस्क्रिप्ट: शून्य वापसी प्रकार किसी भी प्रकार में परिवर्तित?
- 2. मैं उस प्रकार के एक प्रकार के खुले सरणी पैरामीटर में एक प्रकार का एक्स क्यों पास कर सकता हूं?
- 3. क्या मैं एंड्रॉइड में एक AsyncTask को विभिन्न प्रकार के पैरामीटर पास कर सकता हूं?
- 4. क्या मैं SQLite में प्राथमिक कुंजी डेटा प्रकार के रूप में BIGINT के अलावा कुछ भी उपयोग कर सकता हूं?
- 5. मैं पीडीओ पैरामीटर की सरणी कैसे पास कर सकता हूं फिर भी अभी भी उनके प्रकार निर्दिष्ट कर सकता हूं?
- 6. क्या मैं एक माईबेटिस मैपर में पैरामीटर के रूप में एक सूची पास कर सकता हूं?
- 7. विधि पैरामीटर के रूप में अज्ञात प्रकार को पास करना
- 8. Seq.contains टाइप प्रकार पैरामीटर ए के बजाय किसी भी प्रकार का स्वीकार क्यों करता है?
- 9. क्या मैं एक टेबल-प्रति-प्रकार मैपिंग के साथ एक भेदभावकर्ता कॉलम निर्दिष्ट कर सकता हूं?
- 10. क्या मैं MATLAB में वर्ग गुणों को प्रकार निर्दिष्ट कर सकता हूं?
- 11. मैं TryParse() के सामान्य संस्करण में किसी विशिष्ट प्रकार में कैसे परिवर्तित कर सकता हूं?
- 12. जावा: किसी ऑब्जेक्ट के प्रकार के आधार पर मैं गतिशील रूप से निर्दिष्ट प्रकार की सरणी कैसे बना सकता हूं?
- 13. मैं सामान्य प्रकार के पैरामीटर
- 14. मैं यूआईबटन कार्रवाई में किसी प्रकार का पैरामीटर कैसे पास कर सकता हूं?
- 15. मैं LINQ में अनाम प्रकार को मजबूत प्रकार में कैसे परिवर्तित कर सकता हूं?
- 16. मैं सामान्य प्रकार पैरामीटर के साथ एक func में कैसे जा सकता हूं?
- 17. मैं एकाधिक सीमाओं के साथ एक प्रकार पैरामीटर में एक प्रकार तर्क का उपयोग क्यों नहीं कर सकता?
- 18. मैं संदर्भ प्रकारों का उपयोग कंटेनर प्रकार के मान प्रकार के रूप में क्यों नहीं कर सकता?
- 19. टाइपस्क्रिप्ट: अंतर्निहित प्रकार
- 20. जावा में किसी भी प्रकार के किसी भी प्रकार के तर्कों को स्वीकार करने वाली विधि कैसे बनाएं?
- 21. क्या मैं बिगडिसीमल का उपयोग एक आईडी प्रकार के रूप में हाइबरनेट एचबीएम में कर सकता हूं?
- 22. क्या मैं एफ # में टाइप प्रदाता को इनपुट के रूप में एक प्रकार प्रदान कर सकता हूं?
- 23. क्या मैं अपना स्पष्ट प्रकार तुलनित्र इनलाइन निर्दिष्ट कर सकता हूं?
- 24. मैं किसी विधि के पैरामीटर के रूप में कक्षा की संपत्ति कैसे पास कर सकता हूं?
- 25. क्या मैं जावा में एक सामान्य प्रकार को प्रतिबिंबित कर सकता हूं?
- 26. मैं XmlConvert का उपयोग कर किसी ऑब्जेक्ट के रूप में किसी ऑब्जेक्ट के रूप में एक वैल्यू प्रकार कास्ट कैसे परिवर्तित कर सकता हूं?
- 27. जावा में एक प्रकार के रूप में इंटरफ़ेस?
- 28. मैं एक्सकोड 4 में फ़ाइल प्रकार में सिंटैक्स रंग कैसे निर्दिष्ट कर सकता हूं?
- 29. क्या मैं गतिशील सरणी के साथ मूल्य प्रकार के रूप में एक शब्दकोश घोषित कर सकता हूं?
- 30. गो में, मैं एक स्ट्रिंग बेस प्रकार वाले प्रकार के लिए "कन्स्ट्रक्टर" कैसे बना सकता हूं?
मेरे लिए, ऐसा लगता है कि यह एक सरणी हो सकती है जिसमें पूरी तरह से एक प्रकार का होता है, जहां वह प्रकार स्ट्रिंग, बूलियन या नंबर हो सकता है। एक सरणी के बारे में क्या है जिसमें केवल तीन प्रकार के मिश्रण हो सकते हैं? –
मुझे यकीन नहीं है कि ओपी ने क्या पूछा है, लेकिन मैंने अपना जवाब वैसे भी संपादित किया है। आप स्पष्ट रूप से समझते हैं कि दोनों के बीच एक अंतर है। – Joao