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})
}
useElTable
的参数service
中的泛型是通过useElTable
中的TParams
泛型传入的TParams
是Params
的子类,举个例子:假设useElTable
的这个TParams
是这样的这个
IParams
是会透传给参数sevice
的泛型,那么你useElTable
里写死了service
的传参是{current: number, pageSize: number}
,这符合IParams
的约束吗?是不是少了个name
?也就是说你service
的泛型是外部指定的,但是内部却写死了一个类型,显然这个类型是不可能反向兼容外部的。如果你
service
参数是内部写死的,那么useElTable
的这个TParams
根本就没有用【ps:包括TData其实也没被函数用到,泛型如果没用到基本上是可以舍去的】,那就不要再声明为泛型了直接:另外你给的demo里:
应该是这样吧?