it-swarm.dev

كيف يمكنني التحقق مما إذا كان قد تم توفير معلمة اختيارية؟

إعطاء وظيفة مع المعلمات الاختيارية:

function DoSomething(a, b?) {
    /** Implementation */
}

كيف يمكنني تحديد ما إذا كان قد تم توفير معلمة اختيارية من داخل الجسم الوظيفي؟ حاليا ، أفضل طريقة للقيام بذلك والتي يمكنني التفكير فيها هي:

typeof b === 'undefined'

لكن هذا نوع من الفوضى وليس قراءة مباشرة. نظرًا لأن TypeScript يوفر دعمًا اختياريًا للمعلمات ، فإنني آمل أن يكون لديه أيضًا طريقة بديهية للتحقق من توفير المعلمة.

كما يوضح المثال أعلاه ، لا أمانع إذا تم تعيين المعلمة الاختيارية بشكل صريح على undefined أو لم يتم توفيرها على الإطلاق.

تصحيح

لسوء الحظ ، لم يكن هذا السؤال واضحًا كما كان ينبغي أن يكون ، خاصةً إذا كان مقشودًا. كان من المفترض أن يكون حول كيفية تنظيف التحقق مما إذا كانت المعلمة الاختيارية تم حذفها بالكامل كما في:

DoSomething("some value");

لقد قبلت إجابة إيفان لأن حله (b === undefined) أكثر نظافة من الحل في سؤالي (typeof b === 'undefined') مع استمرار نفس السلوك.

الإجابات الأخرى مفيدة بالتأكيد ، والإجابة الصحيحة بالنسبة لك تعتمد على حالة الاستخدام الخاصة بك.

60
Sam

يمكنك فقط التحقق من القيمة لمعرفة ما إذا كانت غير محددة:

var fn = function(a, b) {
    console.log(a, b === undefined);
};

fn(1);
fn(2, undefined);
fn(3, null);
2
Evan Trimboli

بعد googling "التحقق من TypeScript لعدم تحديده" ، رأيت هذا السؤال في الجزء العلوي من النتائج ، لكن الإجابة المقدمة من Evan Trimboli لم تحل مشكلتي.

إليك الإجابة التي حلت مشكلتي في النهاية. الكود التالي هو ما استقرت عليه. يجب أن تعمل في الحالات التي تكون فيها القيمة مساوية null أو undefined:

function DoSomething(a, b?) {
    if (b == null) doSomething();
}
37
Tod Birdsall

الوحدة النمطية util الخاصة بـ TypeScript لها وظيفة isUndefined(). يمكنك استخدامه مثل هذا.

import {isUndefined} from "util";

class A {
    test(b?: string): string {
        if (isUndefined(b)) {
            return "UNDEFINED";
        } else {
            return ("DEFINED" + b);
        }
    }
}
10
Vladimir Prudnikov

يمكنك ببساطة إضافة معلمة اختيارية بقيمة افتراضية مثل هذا

function DoSomething(a, b: boolean=null) {
    if(b == null)
    {
      //parameter was not set
    }
    else
    {
    //parameter is true or false...no other option available
    }
}
7
Tobias Koller