请问该如何修复该ts类型错误?

作者站长头像
站长
· 阅读数 3

在线链接请问该如何修复该ts类型错误?

type Data = { total: number; list: any[] }
type Params = [
  {
    current: number
    pageSize: number
    sorter?:any
  }
]

type Service<TData extends Data, TParams extends Params> = (...args: TParams) => Promise<TData>


const useElTable = <TData extends Data, TParams extends Params>(
  service: Service<TData, TParams>
) => {
   service({current:1,pageSize:1})
}
回复
1个回答
avatar
test
2024-07-08

useElTable的参数service中的泛型是通过useElTable中的TParams泛型传入的TParamsParams的子类,举个例子:假设useElTable的这个TParams是这样的

interface IParams extends Params {
  name: string;
}

这个IParams是会透传给参数sevice的泛型,那么你useElTable里写死了service的传参是{current: number, pageSize: number},这符合IParams的约束吗?是不是少了个name?也就是说你service的泛型是外部指定的,但是内部却写死了一个类型,显然这个类型是不可能反向兼容外部的。如果你service参数是内部写死的,那么useElTable的这个TParams根本就没有用【ps:包括TData其实也没被函数用到,泛型如果没用到基本上是可以舍去的】,那就不要再声明为泛型了直接:

const useElTable = <TData extends Data>(
  service: Service<TData, Params>
) => {
   service({current:1,pageSize:1})
}

另外你给的demo里:

type Params = 
  {
    current: number
    pageSize: number
    sorter?:any
  }


type Service<TData extends Data, TParams extends Params> = (args: TParams) => Promise<TData>

应该是这样吧?

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容