元素隐式地具有“ any”类型,因为在打字稿Deepclone中索引表达式不是“ number”类型

时间:2019-12-06 06:34:14

标签: typescript

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,非常感谢。

0 个答案:

没有答案