开发者问题收集

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

2017-11-16
64699

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

Block-scoped variable 'x' used before its declaration.

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

let x = (typeof x === 'undefined') ? def_val : x;
3个回答

逻辑空值赋值 (x ??= y) 运算符仅当 x 为空值(null 或 undefined)时才赋值。

x ??= default_value
mcoolive
2021-01-22

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

如果你比编译器更了解,你可以分开这些行:

const def_val = 'default';

let x: string;
x = (typeof x === 'undefined') ? def_val : x;

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

常见的用例更像是:

const def_val = 'default';

function work(y: string) {
    let x = (typeof y === 'undefined') ? def_val : y;
}

你还可以添加更严格的编译器选项,使值在许多情况下不太可能未定义。

简写

还有一个可能有用的简写 falsey-coalesce:

const def_val = 'default';

function work(y: string) {
    let x = y || def_val;
}

这将替换 undefinednull0 (零)或 '' 为默认值。

Fenton
2017-11-16

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

const def_val = 'default';

function work(y: string) {
    let x = y ?? def_val;
}

这将仅用默认值替换 undefinednull

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

Tom
2021-01-18