【发布时间】:2021-04-06 17:00:38
【问题描述】:
我正在尝试创建一个部分对象,该对象仅具有满足条件的完整对象的某些字段。但是,当我尝试分配属性时,我收到了主题打字稿错误消息。我创建了一个测试模块来说明概念/问题。请注意,这只是为了说明问题。这不是实际的代码。
type FullObject = {
id: number
name: string
active: boolean
}
type PartialObject = Partial<FullObject>
const myFullObj: FullObject = {
id: 1,
name: 'First Object',
active: true,
}
const myPartialObj: PartialObject = {}
let k: keyof PartialObject
for (k in myFullObj) {
if (myFullObj[k] !== undefined) myPartialObj[k] = myFullObj[k] // Error here
if (k === 'name') myPartialObj[k] = myFullObj[k] // No error here
}
请注意,只有第一个“if”语句有错误。经过一些研究和尝试各种事情后,我通过将部分对象初始化为完整对象然后删除不符合条件的属性来解决该问题。由于这是解决问题的一种倒退方式,因此我更愿意创建具有符合条件的属性的部分对象。
【问题讨论】:
-
myPartialObj是一个空对象,因此您无法访问其中的键和值,因为它们是未定义的。你想在这里做什么? -
如上所述,我正在尝试创建一个部分对象,该对象仅包含满足某些条件的完整对象中的某些字段。我在实际代码中的解决方法是首先将完整的对象分配给部分对象,然后删除不符合条件的字段。
-
好吧,您需要具体说明您要根据
myFullObj为myPartialObj设置值的k。 -
“for in”循环循环遍历 myFullObj 的所有属性,并在每个循环中将 key 的值设置为 key。在我的实际代码中,myFullObj 中有非常多的属性,并且确定该值是否为副本的标准非常复杂。我相信你是说 k 参数不能像我试图做的那样在赋值的 lhs 上使用。相反,在这种情况下,需要将其指定为实际值(id、name 或 active)。在我的情况下,这将非常困难。
-
if (myFullObj[k] !== undefined)对我来说真的没有意义,完整对象的属性永远不会未定义。
标签: javascript typescript object