如何在typescript的泛型中用泛型

更新问题 问题已经解决

更新问题

就是想实现这样一个ts

// 公共方法 单个文件  fn的参数和调用处的参数一致.可能有多个参数
type commonApi = (fn: (props: T) => object) => (props:T) => any

// 业务逻辑文件, 在这里指定泛型。 props为调用处参数, 需要有正确的提示
const result = commonApi ((props) => {
return {...props}
})
// 调用文件 把公共方法 和业务逻辑方法的返回值合并
result({a:1})

求大佬帮我看三种实现方式,都有问题,不晓得这么搞了

type IcommonField = {
  readonly?: boolean,
  required?: boolean,
  title?: string,
  value?: string
  [key: string]: any
}


// 方式一
type IcommonApi<T> = {
  <fn extends (props: T) => {data: object, [key:string]:unknown}>(props: fn): (props:T) => object // 这里的object我还想用自动推断返回结果 而不是写死 在这个里面还有其他逻辑
}

// 方式二
type IFn = <T>(props: T) => {data: object, [key:string]:unknown}
type IcommonApi<T> = {
  <fn extends IFn>(props: fn): (props:T) => object  // 这里的object我还想用自动推断返回结果 而不是写死 在这个里面还有其他逻辑
}

// 公共抽取部分 **突然感觉这里不对, 我不是要在这里指定泛型**
const commonApi:IcommonApi<IcommonField> = (fn) => (props) => {
  const c = fn(props) as ReturnType<typeof fn>;
  return {
    ...c,
    s:1
  }
}

// 方式三 我这样写能满足我最后自动推断的合并, 但是 这个公共的T, 这么搞?现在这样定义是错误的, 最好就是这种这么改改让最后的params  和result 都有正确的提示
const commonApi = <fn extends (props: T) => {data: object, [key:string]:unknown}>(fn: fn) => (props:T) => {
  const c = fn(props) as ReturnType<typeof fn>;
  return {
    ...c,
    s:1
  }
} 

// 单个的业务逻辑 **我是要在这里 指定泛型才对**
const result = commonApi(function(params) {
  // 用方式一 params 能正确提示

  // 用方式二 params 无法提示
  return {
    data: {
      c:1,
      ...params
    }
  }
})({value:'2'})
阅读 825
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题