How can I check whether an optional parameter was provided?
给定带可选参数的函数:
1 2 3 | function DoSomething(a, b?) { /** Implementation */ } |
如何确定函数体中是否提供了可选参数?目前,我能想到的最好的方法是:
1 | typeof b === 'undefined' |
但这是一种混乱,不直接阅读。由于typescript提供了可选的参数支持,我希望它也有一种直观的方式来检查是否提供了参数。
如上面的示例所示,我不介意是否将可选参数显式设置为
不幸的是,这个问题并没有它本应明确的那样,特别是如果它是skim-read。它的目的是为了清楚地检查是否完全忽略了可选参数,如:
我接受了埃文的回答,因为他的解决方案(
其他答案绝对有用,哪个答案对您来说是正确的取决于您的用例。
在google"typescript check for undefined"之后,我在结果的顶部看到了这个问题,但是Evan Trimboli给出的答案并没有解决我的问题。
这就是最终解决我问题的答案。下面的代码是我确定的。在值等于
1 2 3 | function DoSomething(a, b?) { if (b == null) doSomething(); } |
typescript的
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'); } //... } |