解构可空的对象

dee*_* zg 6 typescript ecmascript-6

Typescript(或者我们应该说ES)不允许对null/undefined对象进行解构.它抛出TypeError.

所以,让我们说我们有类似的东西

let {a,b,c} = D;
Run Code Online (Sandbox Code Playgroud)

哪里D可以null.

如果我们需要使用空值检查进行条件解构赋值,那么我们会为那些旨在减少它的东西创建样板代码.

在这样的情况下使用它的最优雅的方法是什么,或者我们应该仅为保证的非空对象使用解构?

Ori*_*ori 13

您可以使用空对象作为后备,如果Dnull,undefined则指定的变量将是undefined.

const D = null;
const { a, b, c } = D || {};

console.log(a, b, c);
Run Code Online (Sandbox Code Playgroud)

另一个选择是使用对象传播,因为传播nullundefined导致空对象(参见此答案).

const D = null;
const { a, b, c } = { ...D };

console.log(a, b, c);
Run Code Online (Sandbox Code Playgroud)

  • 嵌套重组怎么样?例如 `const { z: { b } } = a;` 在这种情况下,`z` 是未定义的 (4认同)
  • 关于如何在子对象中做到这一点的任何想法?例如:``` let a = { b: null }; 让 { b: { c } } = a; // 未捕获的语法错误:无效的解构赋值目标 ``` (3认同)