टाइपस्क्रिप्ट के साथ खुले-समाप्त फ़ंक्शन तर्क


128

IMO, टाइपस्क्रिप्ट भाषा की मुख्य चिंताओं में से एक मौजूदा वेनिला जावास्क्रिप्ट कोड का समर्थन करना है। यह पहली नज़र में मुझे आभास है। निम्नलिखित जावास्क्रिप्ट फ़ंक्शन पर एक नज़र डालें जो पूरी तरह से मान्य है:

नोट: मैं यह नहीं कह रहा हूं कि मुझे यह तरीका पसंद है। मैं सिर्फ यह कह रहा हूं कि यह एक मान्य जावास्क्रिप्ट कोड है।

function sum(numbers) { 

    var agregatedNumber = 0; 
    for(var i = 0; i < arguments.length; i++) { 
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}

इसलिए, हम इस फ़ंक्शन का किसी भी तर्क के साथ उपभोग करते हैं:

console.log(sum(1, 5, 10, 15, 20));

हालाँकि, जब मैं टाइपस्क्रिप्ट प्लेग्राउंड के साथ इसे आज़माता हूं , तो यह संकलन समय त्रुटियों को देता है।

मैं मान रहा हूं कि यह एक बग है। मान लेते हैं कि हमारे पास संगतता मुद्दे नहीं हैं। फिर, क्या इस तरह के कार्यों को खुले-समाप्त तर्कों के साथ लिखने का कोई तरीका है? जैसे paramsC # में फ़ीचर?


2
बस जिज्ञासु, आपके पास नामांकित numbersपैरामीटर भी क्यों है ? आप इसके साथ कुछ नहीं कर रहे हैं।
जस्टिन मॉर्गन

1
@JustinMorgan में कम से कम एक पैरामीटर होने के कारण Intellisense कम से कम संकेत देता है कि कुछ तर्क होने चाहिए।
drzaus

जवाबों:


268

ऐसा करने का टाइपस्क्रिप्ट तरीका ...तर्क के नाम से पहले दीर्घवृत्त ऑपरेटर ( ) को रखना है। ऊपर लिखा जाएगा,

function sum(...numbers: number[]) {
    var aggregateNumber = 0;
    for (var i = 0; i < numbers.length; i++)
        aggregateNumber += numbers[i];
    return aggregateNumber;
}

इसके बाद सही तरीके से चेक टाइप करेंगे

console.log(sum(1, 5, 10, 15, 20));

महान! धन्यवाद। यह निश्चित रूप से जाने का रास्ता है। इसलिए, यदि मेरे प्रश्न में किसी के पास मौजूदा कोड है, तो वह टूट जाएगा। सही?
tugberk

1
हाँ। यह कॉल के बारे में शिकायत करता है, लेकिन आप हस्ताक्षर को राशि (...) में बदलकर किसी भी प्रकार के कई मापदंडों को स्वीकार करने के रूप में राशि की घोषणा कर सकते हैं क्योंकि यह त्रुटि को शांत करेगा। कृपया इसे CodePlex पर बग के रूप में सबमिट करने के लिए स्वतंत्र महसूस करें।
चक।

1
एक आराम पैरामीटर उदाहरण की तलाश में था। Ty।
AM

5

@Chuckj उत्तर के अलावा: आप arrow function expressionटाइपस्क्रिप्ट ( lambdaजावा / .NET में एक की तरह है) का भी उपयोग कर सकते हैं

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}

4

टाइपस्क्रिप्ट में यह रेस्ट पैरामीटर की अवधारणा है , यह पैरामीटर है जो समान प्रकार के कई मान प्राप्त करता है। यदि हम टाइपस्क्रिप्ट को लक्षित करते हैं तो हमें कोड ECMAScript 6 मानक लिखना होगा , फिर टाइपस्क्रिप्ट ट्रांसपिलर इसे इसके बराबर लावा स्क्रिप्ट कोड में परिवर्तित करता है ( जो ECMAScript 5 मानक है)। यदि हम टाइपस्क्रिप्ट का उपयोग करते हैं तो हमें तीन डॉट (...) का उपयोग करना होगा, जैसे रेस्टामेट वेरिएबल नाम, जैसे फंक्शन सम (... संख्या: संख्या []], तब यह काम करेगा।

नोट: बाकी पैरामीटर पैरामीटर सूची में अंतिम पैरामीटर होना चाहिए। फ़ंक्शन फ़ंक्शन योग (नाम: स्ट्रिंग, आयु: संख्या, ... संख्या: संख्या [])।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.