सामान्य रूप से कार्य अधिभार क्या है?
फंक्शन ओवरलोडिंग या मेथड ओवरलोडिंग एक ही नाम के कई कार्यों को अलग-अलग कार्यान्वयन ( विकिपीडिया ) के साथ बनाने की क्षमता है
जेएस में फ़ंक्शन ओवरलोडिंग क्या है?
जेएस में यह सुविधा संभव नहीं है - अंतिम परिभाषित कार्य कई घोषणाओं के मामले में लिया जाता है:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... और टीएस में?
ओवरलोड , जेएस रनटाइम पर कोई प्रभाव नहीं के साथ एक संकलन समय निर्माण कर रहे हैं :
function foo(s: string): string // overload #1 of foo
function foo(s: string, n: number): number // overload #2 of foo
function foo(s: string, n?: number): string | number {/* ... */} // foo implementation
यदि आप ऊपर दिए गए कोड (JS की तुलना में सुरक्षित) का उपयोग करते हैं, तो एक डुप्लिकेट कार्यान्वयन त्रुटि उत्पन्न होती है। टीएस शीर्ष-डाउन ऑर्डर में पहला फिटिंग अधिभार चुनता है, इसलिए ओवरलोड को सबसे विशिष्ट से सबसे व्यापक तक क्रमबद्ध किया जाता है।
टीएस में विधि अधिभार: एक अधिक जटिल उदाहरण
अतिभारित कार्य करने के लिए एक समान तरीके से ओवरलोड क्लास विधि का उपयोग किया जा सकता है:
class LayerFactory {
createFeatureLayer(a1: string, a2: number): string
createFeatureLayer(a1: number, a2: boolean, a3: string): number
createFeatureLayer(a1: string | number, a2: number | boolean, a3?: string)
: number | string { /*... your implementation*/ }
}
const fact = new LayerFactory()
fact.createFeatureLayer("foo", 42) // string
fact.createFeatureLayer(3, true, "bar") // number
कंपाइलर द्वारा लागू किए गए फंक्शन कार्यान्वयन सभी ओवरलोड हस्ताक्षर के अनुकूल होने के कारण, अलग-अलग ओवरलोड संभव हैं।
अधिक जानकारी: