如果在打字稿中未定义,如何设置变量?

Rah*_*gli 6 typescript

我试图在未定义时设置变量值,但是在尝试使用 vanilla javascript 方法时出现错误。

在声明之前使用的块范围变量“x”。

使用打字稿设置未定义变量的最佳方法是什么?

let x = (typeof x === 'undefined') ? def_val : x;
Run Code Online (Sandbox Code Playgroud)

mco*_*ive 41

逻辑空赋值 (x ??= y) 运算符仅在 x 为空(空或未定义)时进行赋值。

x ??= default_value
Run Code Online (Sandbox Code Playgroud)


Tom*_*Tom 16

还有另一种使用Nullish 合并运算符的简写:

const def_val = 'default';

function work(y: string) {
    let x = y ?? def_val;
}
Run Code Online (Sandbox Code Playgroud)

这将仅替换undefinednull替换为默认值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator


Fen*_*ton 14

TypeScript 可以看出它x绝对没有定义,因为它是一个块范围的变量,你可以看到整个块。

如果您比编译器更了解,则可以将行分开:

const def_val = 'default';

let x: string;
x = (typeof x === 'undefined') ? def_val : x;
Run Code Online (Sandbox Code Playgroud)

但是您可能想要考虑在您的情况下如何可能未定义块范围变量(也许您的代码不像您问题中的示例那么简单)。

常见的用例更像是:

const def_val = 'default';

function work(y: string) {
    let x = (typeof y === 'undefined') ? def_val : y;
}
Run Code Online (Sandbox Code Playgroud)

您还可以添加更严格的编译器选项,以减少在许多情况下未定义值的可能性。

速记

还有一个可能有用的速记 falsey-coalesce:

const def_val = 'default';

function work(y: string) {
    let x = y || def_val;
}
Run Code Online (Sandbox Code Playgroud)

这将替换undefined, null, 0(零)或''使用默认值。

  • 希望我知道‘y || def_val` 之前。我的代码中有这么多烦人的重复,哈哈 (2认同)