首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解构可空对象

解构可空对象
EN

Stack Overflow用户
提问于 2017-07-20 17:03:19
回答 1查看 21.3K关注 0票数 60

Typescript (或者我们应该说ES)不允许解构null/未定义的对象。它抛出TypeError。

所以,假设我们有这样的东西

代码语言:javascript
复制
let {a,b,c} = D;

其中D可以是null

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

在这种情况下使用它最优雅的方式是什么,或者我们应该只对有保证的非空对象使用解构吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 17:15:24

您可以使用空对象作为备用对象,如果Dnullundefined,则分配的变量将为undefined

代码语言:javascript
复制
const D = null;
const { a, b, c } = D || {};

console.log(a, b, c);

使用typescript,您需要向回退对象(TS playground)添加正确的类型(或any)。例如:

代码语言:javascript
复制
interface Obj {
    a?: string;
    b?: string;
    c?: string;
}

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

console.log(a, b, c);

另一种选择是使用object spread,因为传播nullundefined会产生一个空对象(see this SO answer)。

代码语言:javascript
复制
const D = null;
const { a, b, c } = { ...D };

console.log(a, b, c);

使用typescript,您需要将类型添加到您传播的变量和您解析的对象中。例如(TS Playground):

代码语言:javascript
复制
interface Obj {
    a?: string;
    b?: string;
    c?: string;
}

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

console.log(a, b, c);

如果您需要处理嵌套解构,请使用默认值:

代码语言:javascript
复制
const D = null;
const { a, a: { z } = {}, b, c } = { ...D };

console.log(a, b, c, z);

票数 103
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45210111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档