请问该如何修复该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.7k
2 个回答

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>

应该是这样吧?

type Params = 
  {
    current: number
    pageSize: number
    sorter?:any
  }
logo
Microsoft
子站问答
访问
宣传栏