下面的逻辑怎么用 ts 改写,不标红就可以了?

// 深度克隆
function getType(target: unknown) {
  return Object.prototype.toString.call(target).slice(8, -1);
}

function deepClone<T>(target: T): T {
  const type = getType(target);
  if (type === 'Array') {
    const result: T = [];
    target.forEach((value, index) => {
      result[index] = deepClone(value);
    });
    return result;
  }
  if (type === 'Object') {
    const result: T = {};
    Object.keys(target).forEach((key) => {
      result[key] = deepClone(target[key]);
    });
    return result;
  }
  if (type === 'RegExp') {
    const reFlags = /\w*$/;
    const result = new target.constructor(target.source, reFlags.exec(target));
    result.lastIndex = target.lastIndex;
    return result;
  }
  return target;
}
阅读 1.6k
1 个回答

深拷贝一般来说不用关心内部实现的类型,抄一下lodash的类型即可。
lodash的cloneDeep类型:

interface LoDashStatic {
        /**
         * This method is like _.clone except that it recursively clones value.
         *
         * @param value The value to recursively clone.
         * @return Returns the deep cloned value.
         */
        cloneDeep<T>(value: T): T;
    }

所以这样写就可以了

// 深度克隆
function deepClone<T>(params:T):T
function deepClone(target) {
  //内部实现
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题