请问该如何修复该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个回答
test
2024-07-08
useElTable
的参数service
中的泛型是通过useElTable
中的TParams
泛型传入的TParams
是Params
的子类,举个例子:假设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>
应该是这样吧?
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容