如何检查是否提供了可选参数?

时间:2014-01-05 23:24:00

标签: typescript

给定带有可选参数的函数:

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

如何确定是否在函数体内提供了可选参数?目前,我能想到的最好的方法是:

typeof b === 'undefined'

但这有点混乱而且不直接阅读。由于TypeScript提供了可选的参数支持,我希望它还有一种直观的方法来检查是否提供了参数。

如上例所示,我不介意是否将可选参数显式设置为undefined或根本不提供。

修改

不幸的是,这个问题并不像应该的那样清晰,特别是如果它是脱脂阅读。它的目的是如何干净地检查可选参数是否完全省略,如:

DoSomething("some value");

我接受了Evan的答案,因为他的解决方案(b === undefined)比我的问题(typeof b === 'undefined')更清晰,同时仍然有相同的行为。

其他答案肯定是有用的,哪个答案对你来说是正确的取决于你的用例。

4 个答案:

答案 0 :(得分:10)

TypeScript的util模块具有函数isUndefined()。你可以像这样使用它。

import {isUndefined} from "util";

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

答案 1 :(得分:7)

你可以简单地添加一个带有默认值的可选参数,例如

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

答案 2 :(得分:2)

您可以检查该值以查看它是否未定义:

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

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

答案 3 :(得分:0)

来自here的作品没有问题:

function getSchool(name: string, address?: string, pinCode?: string): string {
    if (address == undefined) {
        console.log('address not defined');
    }
    if (pinCode == undefined) {
        console.log('pincode not defined');
    }
    //...
}