typescript 错误 2345 2769 2322

这个问题怎么解决

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 }]
})

上述代码复现案例链接

实际项目问题链接

实际简化项目

阅读 1.4k
1 个回答

子类型 subtype 的定义可以再理解下,我认为的是子类型 TParams 比父类型 Params 更具体,具有的属性更多。所以在 fn 的定义里,你直接使用子类型,是非常不可控的,因为你知道到具体的子类型包括哪些。
解决方案就是改用父类型就行:原来例子基础上改动

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题