我正在尝试创建一个部分对象,该对象仅具有满足条件的完整对象的某些字段。但是,当我尝试分配属性时,我收到了主题打字稿错误消息。我创建了一个测试模块来说明概念/问题。请注意,这只是为了说明问题。这不是实际的代码。
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”语句有错误。经过一些研究和尝试各种事情后,我通过将部分对象初始化为完整对象,然后删除不符合标准的属性来解决这个问题。由于这是解决问题的倒退方法,我更愿意创建具有满足条件的属性的部分对象。
答案 0 :(得分:0)
我想出了以下解决方案。它清楚地说明了我想要做什么:如果源对象属性满足条件,则将该属性复制到部分目标对象中。在这个例子中,我使用“not undefined”作为标准。在实际代码中,标准更为复杂。
type FullObject = {
id: number
name: string
active: boolean
}
type PartialObject = Partial<FullObject>
const myFullObj: FullObject = {
id: 1,
name: 'First Object',
active: true,
}
let myPartialObj: PartialObject = {}
let k: keyof PartialObject
for (k in myFullObj) {
if (myFullObj[k] !== undefined) myPartialObj = { ...myPartialObj, ...Object.fromEntries([[k, myFullObj[k]]]) }
}
console.log(JSON.stringify(myPartialObj, null, ' '))
似乎必须有更好的方法来实现这一点。但是,该示例说明了意图。