function getType<T>(obj: T): string {
const str = Reflect.toString.call(obj)
const map: Record<string, string> = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Function]': 'function',
'[object Array]': 'array',
'[object Date]': 'date',
'[object RegExp]': 'regExp',
'[object Undefined]': 'undefined',
'[object Null]': 'null',
'[object Object]': 'object',
'[object Map]': 'map',
'[object Set]': 'set',
}
if (obj instanceof Element) {
return 'element'
}
return map[str]
}
export default function deepClone<T>(ori: T): T {
const type = getType(ori)
if (type === 'array') {
let copy: T[] = []
return copyArray(ori, copy) as T
}
return ori
}
function copyArray<T, K>(ori: Array<K>): T {
let copy: K[] = []
let index, value
for ([index, value] of ori.entries()) {
copy[index] = deepClone(value)
}
return copy
}
元素隐式地具有“ any”类型,因为索引表达式不是“ number”类型。 如果可以的话,请告诉我如何实现我的deepClone,非常感谢。