关于typescript:如何检查是否提供了可选参数?

How can I check whether an optional parameter was provided?

给定带可选参数的函数:

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

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

1
typeof b === 'undefined'

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

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

编辑

不幸的是,这个问题并没有它本应明确的那样,特别是如果它是skim-read。它的目的是为了清楚地检查是否完全忽略了可选参数,如:

DoSomething("some value");

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

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


在google"typescript check for undefined"之后,我在结果的顶部看到了这个问题,但是Evan Trimboli给出的答案并没有解决我的问题。

这就是最终解决我问题的答案。下面的代码是我确定的。在值等于nullundefined的情况下,它应该起作用:

1
2
3
function DoSomething(a, b?) {
    if (b == null) doSomething();
}


typescript的util模块具有isUndefined()功能。你可以这样使用它。

1
2
3
4
5
6
7
8
9
10
11
import {isUndefined} from"util";

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


您可以简单地添加一个具有如下默认值的可选参数

1
2
3
4
5
6
7
8
9
10
function DoSomething(a, b: boolean=null) {
    if(b == null)
    {
      //parameter was not set
    }
    else
    {
    //parameter is true or false...no other option available
    }
}

您只需检查该值是否未定义:

1
2
3
4
5
6
7
var fn = function(a, b) {
    console.log(a, b === undefined);
};

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


从这里开始没有问题:

1
2
3
4
5
6
7
8
9
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');
    }
    //...
}