ts声明问题

我有一个类似omit功能的函数:

/**
 * 从source处拷贝需要的字段
 *
 * @param source
 * @param ignoreProps 不需要拷贝的字段
 */
export function omit<T extends Record<string, any>, K extends keyof T>(source: T, ignoreProps: K[]): Omit<T, K> {
  if (!source) return source

  return Object
    .entries(source)
    .reduce((obj, [key, value]) => {
      !(ignoreProps as string[]).includes(key) && (obj[key] = value)
      return obj
    }, Object.create(null))
}

我现在想把ignoreProps入参改为函数类型,即ignoreProps: () => K[],那我函数的返回类型该怎么写才能让说omit({a: 1, b: 2}, ()=>['a'])能正确推导出{a: 1}的结果类型?

阅读 1.1k
1 个回答

就把参数 ignoreProps 改成 ignoreFn: () => K[] 这样子了,下面的 ignorePropsignoreFn() 代替一下就好了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进