打字稿 - 对象的条件属性

Smi*_*son 7 javascript conditional properties object typescript

我有以下对象,我希望拥有条件属性:

{ name: this.username, DOB: new Date(this.inputDate)}
Run Code Online (Sandbox Code Playgroud)

比如说,如果用户已经指定了他们的性别,我希望添加一个名为性别的第三个属性。以下内容的正确语法是什么:

{ name: this.username, DOB: new Date(this.inputDate), if(this.userGender) gender: this.userGender}
Run Code Online (Sandbox Code Playgroud)

PS如果没有价值,我希望gender在我的对象中拥有该属性。那么我如何才能在满足条件的情况下创建属性呢?

Ami*_*mir 18

也可以这样做,更加干净和可读。

const myObj = {
    name: this.username,
    DOB: new Date(this.inputDate),
    ...(this.userGender && { gender : this.userGender })
}
Run Code Online (Sandbox Code Playgroud)


CRi*_*ice 14

理想情况下,您只需在声明对象后添加适当的属性作为第二个操作。所以像:

const myObj = {
    name: this.username,
    DOB: new Date(this.inputDate),
}

if(this.userGender) myObj.gender = this.userGender;
Run Code Online (Sandbox Code Playgroud)

但是,有时最好与其余属性一起声明一个“可选”属性,在这种情况下,您可以使用 object spread 来获得您正在寻找的效果:

const myObj = {
    name: this.username,
    DOB: new Date(this.inputDate),

    ...this.userGender
        ? { gender: this.userGender }
        : {}
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,我们可以这样做 `...this.userGender && { sex: this.userGender }` (3认同)