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

Sam*_*Sam 63 typescript

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

function DoSomething(a, b?) {
    /** Implementation */
}
Run Code Online (Sandbox Code Playgroud)

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

typeof b === 'undefined'
Run Code Online (Sandbox Code Playgroud)

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

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

Tod*_*all 39

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

这是最终解决了我的问题的答案.以下代码是我所确定的.它应该适用于值等于null或的情况undefined:

function DoSomething(a, b?) {
    if (b == null) doSomething();
}
Run Code Online (Sandbox Code Playgroud)

  • 我想知道这件事.https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines#null-and-undefined说"不要使用null".https://basarat.gitbooks.io/typescript/content/docs/tips/null.html说"Null很糟糕".我有兴趣了解更多关于使用`null`而不是`undefined`的潜在缺陷. (3认同)
  • `null` 和 `undefined` 是不同的值。在这个例子中 `DoSomething('smth', null)` 我们确实提供了可选参数并且 `doSomething()` 将被执行。如果未传递可选参数,则它将是“未定义”。 (3认同)
  • 它说“注意:这些是 TypeScript 贡献者的编码指南。” (2认同)

Eva*_*oli 14

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

var fn = function(a) {
    console.log(a === undefined);
};
    
fn();          // true
fn(undefined); // true
fn(null);      // false
fn('foo');     // false
Run Code Online (Sandbox Code Playgroud)

  • 我认为 `typeof` 检查更安全的原因是 `undefined` 可以在某些浏览器中重新定义(有意或无意)。 (3认同)

Vla*_*kov 11

TypeScript的util模块具有功能isUndefined().你可以像这样使用它.

import {isUndefined} from "util";

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

  • 自 v4 以来,`isUndefined` util 函数已被弃用。使用 `value === undefined` 代替。 (5认同)

Tob*_*ler 7

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

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