it-swarm.asia

وسيطات دالة مفتوحة مع TypeScript

IMO ، أحد الشواغل الرئيسية لـ TypeScript language هو دعم كود Vanilla JavaScript الحالي. هذا هو الانطباع الذي كان لدي للوهلة الأولى. ألقِ نظرة على وظيفة JavaScript التالية والتي تكون صالحة تمامًا:

ملاحظة: أنا لا أقول أنني أحب هذا النهج. أنا فقط أقول أن هذا رمز JavaScript صالح.

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

ومع ذلك ، عندما أجرب ذلك باستخدام TypeScript Playground ، فإنه يعطي أخطاء وقت الترجمة.

أنا أفترض أن هذا خطأ. لنفترض أننا لا نواجه مشكلات التوافق. ثم ، هل هناك أي طريقة لكتابة هذا النوع من الوظائف باستخدام الوسائط المفتوحة؟ مثل ميزة params في C #؟

102
tugberk

طريقة TypeScript للقيام بذلك هي وضع عامل التشغيل Ellipsis (...) قبل اسم الوسيطة. سيتم كتابة ما ورد أعلاه كـ ،

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

بالإضافة إلى إجابةchuckj: يمكنك أيضًا استخدام arrow function expression في TypeScript (نوع lambda في Java/.NET)

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
4
Jeroen van Dijk-Jun

في TypeScript هو مفهوم Rest Parameter ، هو المعلمة التي تتلقى قيم متعددة من نوع مماثل.إذا كنا نستهدف TypeScript ثم يتعين علينا كتابة التعليمات البرمجية ECMAScript 6 standard ، ثم تحويل Transpiler transpiler إلى رمز برنامج Java المكافئ الخاص به (والذي هو ECMAScript 5 standard). إذا استخدمنا TypeScript ، فعلينا استخدام ثلاثة تفضيلات dot (...) مع اسم متغير restparameter ، مثل دالة الدالت (... الأرقام: رقم []) ، ثم ستعمل.

ملاحظة: Rest Parameter يجب أن تكون المعلمة الأخيرة في قائمة المعلمة. likewise function sum (name: string، age: number، ... numbers: number []).

3
Sheo Dayal Singh