টাইপস্ক্রিপ্ট সহ মুক্ত-সমাপ্ত ফাংশন আর্গুমেন্ট


128

আইএমও, টাইপস্ক্রিপ্ট ভাষার অন্যতম প্রধান উদ্বেগ হ'ল বিদ্যমান ভ্যানিলা জাভাস্ক্রিপ্ট কোডটিকে সমর্থন করা। এটি আমার প্রথম নজরে ছিল এমন ছাপ। নিম্নলিখিত জাভাস্ক্রিপ্ট ফাংশনটি দেখুন যা পুরোপুরি বৈধ:

দ্রষ্টব্য: আমি বলছি না যে আমি এই পদ্ধতিটি পছন্দ করি। আমি কেবল বলছি এটি একটি বৈধ জাভাস্ক্রিপ্ট কোড।

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));

যাইহোক, আমি যখন টাইপস্ক্রিপ্ট প্লেগ্রাউন্ড দিয়ে চেষ্টা করে দেখি এটি সংকলন সময় ত্রুটি দেয়।

আমি ধরে নিচ্ছি যে এটি একটি বাগ। আসুন ধরে নেওয়া যাক আমাদের সামঞ্জস্যের সমস্যা নেই। তাহলে, ওপেন-এন্ড আর্গুমেন্ট সহ এই ধরণের ফাংশনগুলি লেখার কোনও উপায় আছে কি? যেমন paramsসি # তে বৈশিষ্ট্য?


2
শুধু কৌতূহলী, আপনার এমনকি একটি নামক numbersপ্যারামিটার কেন? আপনি এটি দিয়ে কিছুই করছেন না।
জাস্টিন মরগান

1
@ জাস্টিনমর্গান কমপক্ষে একটি প্যারামিটার থাকার কারণে ইন্টেলিসেন্সকে কমপক্ষে ইঙ্গিত দেয় যে কিছু যুক্তি হওয়া উচিত।
ড্রাজস

উত্তর:


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
হ্যাঁ. এটি কল সম্পর্কে অভিযোগ করে তবে আপনি স্বাক্ষরটি যোগফলের পরিবর্তে (...) এর পরিবর্তে কোনও ধরণের একাধিক পরামিতি গ্রহণের হিসাবে যোগফল হিসাবে ঘোষণা করতে পারেন এটি ত্রুটিটি শান্ত করবে। কোডপ্লেক্সে বাগ হিসাবে এটি জমা দিতে নির্দ্বিধায় অনুভব করুন।
চকজ

1
একটি বিশ্রামের প্যারামিটার উদাহরণ খুঁজছিল। Ty।
এএম

5

@ চকজ জবাব ছাড়াও: আপনি টাইপস্ক্রিপ্ট এও ব্যবহার করতে পারেন arrow function expression( lambdaজাভা /। নেট এ এক ধরণের )

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

4

টাইপস্ক্রিপ্টে এটি রেস্ট প্যারামিটারের ধারণা , এটি প্যারামিটার যা একই ধরণের একাধিক মান অর্জন করে we যদি আমরা টাইপস্ক্রিপ্টকে লক্ষ্যবস্তু করি তবে আমাদের কোড ECMAScript 6 স্ট্যান্ডার্ড লিখতে হবে , তবে টাইপস্রিপ্ট ট্রান্সপ্লারার এটির সমতুল্য জাভা স্ক্রিপ্ট কোডে রূপান্তরিত করে ( যা ইসমাস্ক্রিপ্ট ৫ স্ট্যান্ডার্ড) .আর যদি আমরা টাইপস্ক্রিপ্ট ব্যবহার করি তবে আমাদের পুনরুদ্ধারকারী ভেরিয়েবল নামের তিনটি ডট (...) প্রেফেক্স ব্যবহার করতে হবে, যেমন ফাংশন যোগফল (... সংখ্যা: সংখ্যা []), তবে এটি কার্যকর হবে।

দ্রষ্টব্য: বিশিষ্ট প্যারামিটারটি প্যারামিটার তালিকার শেষ প্যারামিটার হতে হবে like অনুরূপভাবে ফাংশন যোগফল (নাম: স্ট্রিং, বয়স: সংখ্যা, ... সংখ্যা: সংখ্যা [])।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.