Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Typescript中创建仅包含非null/未定义属性的对象?_Typescript_Object - Fatal编程技术网

如何在Typescript中创建仅包含非null/未定义属性的对象?

如何在Typescript中创建仅包含非null/未定义属性的对象?,typescript,object,Typescript,Object,我有一个这样的财产清单: const firstProperty = this.checkSome(param) ? this.someArray[1] : null; const secondProperty = this.anotherProperty ? this.anotherProperty.id : null; 接下来,我要创建一个对象,该对象具有以下属性: myObject = { firstProperty, secondProperty, };

我有一个这样的财产清单:

const firstProperty = this.checkSome(param) ? this.someArray[1] : null;
const secondProperty = this.anotherProperty ? this.anotherProperty.id : null;
接下来,我要创建一个对象,该对象具有以下属性:

    myObject = {
      firstProperty,
      secondProperty,
};
const myObject: MyObject = {}
它工作正常,问题是myObject包含这些属性,即使它们为null或未定义。我想要的是,例如,如果secondProperty为null,那么myObject在创建之后根本就没有这样的属性。
实现这一目标的最短途径是什么?考虑到属性的数量可以超过两个,事实上,我有十几个。

< P>听起来好像你描述了一个可选属性的接口。让我们从这里开始

interface MyObject {
    firstProperty?: number
    secondProperty?: string
}
现在,您可以声明使用该接口但缺少所有可选属性的变量:

    myObject = {
      firstProperty,
      secondProperty,
};
const myObject: MyObject = {}
最后一步是有条件地设置此对象的属性:

 if (Math.random() > 0.5) myObject.firstProperty = 123
 if (Math.random() > 0.5) myObject.secondProperty = "a string"

您可以使用
delete
语句循环每个属性并删除:

Object.keys(myObject).forEach(key=>{
if(obj[键]==null){
删除obj[key];
}
})
也可以使用reduce创建新对象:

const newObj = Object.entries(myObjec).reduce((prev, [key, value]) => {
    if (value != null) {
        prev[key] = value
    }
    return prev
}, {} as typeof myObjec)
请注意,如果希望具有相同的对象类型,则需要强制转换

相关问题:


我最终选择了你的方式,尽管每个属性的条件似乎都不合适