这个问题怎么解决
type Params = [
{
current: number
pageSize: number
[key: string]: any
},
...any[]
]
function fn<TParams extends Params>(t: TParams, option?: { defaultParams: TParams }) {
const run = (...params: TParams) => {
console.log(params)
}
run({ current: 1, pageSize: 2 }, 'lutz') // 错误在这ts2345
}
fn([{ current: 1, pageSize: 2 }], {
defaultParams: [{ current: 1, pageSize: 10 }]
})
子类型 subtype 的定义可以再理解下,我认为的是子类型
TParams
比父类型Params
更具体,具有的属性更多。所以在fn
的定义里,你直接使用子类型,是非常不可控的,因为你知道到具体的子类型包括哪些。解决方案就是改用父类型就行:原来例子基础上改动。