是这样的,我实现一个函数cross的方法,实现两个对象的属性合并
function cross<T extends object, U extends object>(objOne: T, objTwo: U): T & U {
let obj = {}
let combine = obj as T & U
Object.keys(objOne).forEach((key) => {
combine[key] = objOne[key] // 报错
})
Object.keys(objTwo).forEach((key) => {
if (!combine.hasOwnProperty(key)) {
combine[key] = objTwo[key] //报错
}
})
return combine;
}
有大神帮帮我看看么
因为你的
key
是string
类型,而不是keyof T
。你约束了combine
的类型必须是T & U
,但string
可以是任意不存在于T
或U
的键的值。正确的写法如下,适用于任意个对象合并: