You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript函数如何在指定一个泛型时自动推导其余泛型类型

解决方案

TypeScript 目前不支持泛型参数的部分自动推导,当你手动指定任意一个泛型参数后,剩余未指定的泛型参数会直接使用定义时的约束值,不会通过入参自动推导,因此需要用柯里化拆分泛型参数层解决该问题。

修改后的函数定义

export const createStore = <
  OutputDocument extends Record<string, unknown>
>() => <
  Actions extends Record<string, unknown>
>(
  inputDocument: Record<string, unknown>,
  actions: () => Actions,
): OutputDocument & Actions => {

  // 实际业务中该函数会接收输入文档,将其修改为OutputDocument类型
  const outputDocument = inputDocument as unknown as OutputDocument

  return Object.assign({}, outputDocument, actions())
}

调用方式

仅需在手动指定OutputDocument类型后多补一对空括号即可,剩余Actions类型会自动从入参推导:

const test = createStore<{ output: string }>()({ input: 'string here' }, () => ({ update: () => 'test' }))

此时test的类型将完全符合预期,为{ output: string } & { update: () => string }。


内容的提问来源于stack exchange,提问作者Chris Drackett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:48:00