如何在TypeScript中安全地解构JavaScript对象

如何在TypeScript中安全地解构JavaScript对象,javascript,typescript,Javascript,Typescript,我想从JavaScript对象(如下)中提取属性,但我想保护自己不受对象为null或未定义以及不存在的属性的影响。也就是说,我希望这些值只是未定义的,没有JavaScript错误 const {id,username,userFirstName,userLastName} = attendeeResults; 您可以使用以下内容,请注意,我在attendee中省略了username,以表明它保留空值 const attenderesults={id:1,userFirstName:'John

我想从JavaScript对象(如下)中提取属性,但我想保护自己不受对象为null或未定义以及不存在的属性的影响。也就是说,我希望这些值只是未定义的,没有JavaScript错误

const {id,username,userFirstName,userLastName} = attendeeResults;

您可以使用以下内容,请注意,我在
attendee
中省略了username,以表明它保留空值

const attenderesults={id:1,userFirstName:'John',userLastName:'Smith'}
常量对象={
id:null,
用户名:null,
userFirstName:null,
userLastName:null
};
分配对象(对象、结果);

控制台日志(obj)
您可以使用以下内容,请注意,我在
与会者
中省略了username,以表明它保留空值

const attenderesults={id:1,userFirstName:'John',userLastName:'Smith'}
常量对象={
id:null,
用户名:null,
userFirstName:null,
userLastName:null
};
分配对象(对象、结果);

控制台日志(obj)您可以使用逻辑运算符来实现这一点,如以下示例所示:
constnullobject=null;
常量{foo,bar}=nullObject | |{};

console.log(foo,bar)您可以使用逻辑运算符来实现这一点,如以下示例所示:
constnullobject=null;
常量{foo,bar}=nullObject | |{};

console.log(foo,bar)这可以通过以下方式完成:

const{id,username,…rest}={id:10,username:'u',firstname:'behzad',lastname:'besharati'};

日志(id、用户名、rest)这可以通过以下方式完成:

const{id,username,…rest}={id:10,username:'u',firstname:'behzad',lastname:'besharati'};

日志(id、用户名、rest)JavaScript允许您在解构对象时定义默认值。 例如:

const {id: 0,username:'',userFirstName:'',userLastName:''} = attendeeResults;

但是,如果
AttendeResults
对象为null或未定义,则Destrunturing会引发错误。

JavaScript允许您在解构对象时定义默认值。 例如:

const {id: 0,username:'',userFirstName:'',userLastName:''} = attendeeResults;

但是,如果
AttendeResults
对象为null或未定义,则Destrunturing会抛出一个错误。

这比我提出的更好,因为我不必声明所有内容,但我希望有一个更紧凑的解决方案。你可能应该创建一个类来表示你的用户模型,而不仅仅是实例化一个新的类并复制值(如果它们存在)。仅供参考,我没有对此投反对票。我欣赏所有的想法。我投了更高的票it@Pete谢谢,我猜?这比我想的要好,因为我不必声明所有内容,但我希望有一个更紧凑的解决方案。你可能应该创建一个类来表示你的用户模型,而不仅仅是实例化一个新类并复制值(如果存在)。仅供参考,我没有对此投反对票。我欣赏所有的想法。我投了更高的票it@Pete谢谢,我猜?如果对象上不存在属性,
undefined
正是解构所能提供的,无需预防错误。如果对象上不存在属性,
undefined
正是解构所能提供的,无需预防错误。“我希望值只是未定义的”。而不是
0
如果对象中不存在键,则析构函数将为您提供未定义的值,默认值用于防止未定义的值,但它是可选的。只有对null或未定义的对象进行析构函数时才会抛出错误。“我希望值只是未定义的。”“.Not
0
如果对象中不存在键,则析构函数将为您提供未定义的值,默认值用于防止未定义的值,但它是可选的。只有对null或未定义的对象进行反编译才会引发错误。OP不需要rest属性。OP不需要rest属性。