给定带有可选参数的函数:
function DoSomething(a, b?) {
/** Implementation */
}
如何确定是否在函数体内提供了可选参数?目前,我能想到的最好的方法是:
typeof b === 'undefined'
但这有点混乱而且不直接阅读。由于TypeScript提供了可选的参数支持,我希望它还有一种直观的方法来检查是否提供了参数。
如上例所示,我不介意是否将可选参数显式设置为undefined
或根本不提供。
不幸的是,这个问题并不像应该的那样清晰,特别是如果它是脱脂阅读。它的目的是如何干净地检查可选参数是否完全省略,如:
DoSomething("some value");
我接受了Evan的答案,因为他的解决方案(b === undefined
)比我的问题(typeof b === 'undefined'
)更清晰,同时仍然有相同的行为。
其他答案肯定是有用的,哪个答案对你来说是正确的取决于你的用例。
答案 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');
}
//...
}