在深度克隆对象时,Typescript Error 2345
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在深度克隆对象时,Typescript Error 2345相关的知识,希望对你有一定的参考价值。
我想用typescript实现深度克隆对象。但是存在一个我无法处理它的错误。
export function cloneDeep <T>(obj: T): T
if (!obj || typeof obj !== 'object')
return obj
const result: any = isArray(obj) ? [] :
return Object.keys(obj).forEach((key: keyof T) =>
if (obj[key] && typeof obj[key] === 'object')
result[key] = cloneDeep(obj[key])
else
result[key] = obj[key]
)
错误信息
TS2345:类型'(key:keyof T)=> void'的参数不能分配给'(value:string,index:number,array:string [])=> void'类型的参数。参数“key”和“value”的类型不兼容。类型'string'不能分配给'keyof T'类型。
答案
两个问题:
Object.keys
总是将键作为字符串返回(因此与keyof T
不兼容)。Array.prototype.forEach
不返回任何东西。
export function cloneDeep<T>(obj: T): T
if (!obj || typeof obj !== 'object')
return obj
const result: any = isArray(obj) ? [] : ;
// Drop annotation of `key`.
Object.keys(obj).forEach(key =>
if (obj[key] && typeof obj[key] === 'object')
result[key] = cloneDeep(obj[key])
else
result[key] = obj[key]
);
// Return result
return result;
以上是关于在深度克隆对象时,Typescript Error 2345的主要内容,如果未能解决你的问题,请参考以下文章