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

TypeScript如何实现函数参数与对象属性的类型共享

TypeScript 函数参数与对象属性类型同步实现方案

核心思路是利用TypeScript对带标签元组的隐式转换能力,自定义工具类型把Parameters获取的参数元组直接转为同键名、同类型的对象结构,实现两边类型自动同步,不需要重复维护类型定义。

核心工具类型

type ParamsToObj<F extends (...args: any) => any> =
  (...args: Parameters<F>) => void extends (arg: infer ArgObj) => void
    ? ArgObj
    : never

这个工具类型利用了TS的内置类型推导规则:当剩余参数元组被约束为单个函数参数时,TS会自动把带参数名标签的元组转换为键为参数名、值为参数类型的普通对象,不需要手动做递归映射匹配。

完整使用示例

// 原函数定义
const f = (param1: string, param2: number, param3: boolean): any => null

// n函数的入参数组元素类型直接绑定f的参数结构
const n = (obj: Array<ParamsToObj<typeof f>>): any => null

// 合法调用,类型校验完全通过
n([
  { param1: "a", param2: 1, param3: true },
  { param1: "b", param2: 2, param3: false },
])

// 以下错误调用会被TS直接拦截
// 1. 缺少参数属性
n([{ param1: "c", param2: 3 }]) // 报错:缺失param3属性
// 2. 属性类型不匹配
n([{ param1: 1, param2: "err", param3: "err" }]) // 报错:所有属性类型不符合要求

自动同步效果

后续只要修改函数f的参数定义(增删参数、修改参数类型/参数名),n函数接收的数组元素类型会自动同步更新,不需要手动维护两边的类型定义,完全避免重复写类型导致的不一致问题。
该方案兼容TypeScript 4.0及以上所有正式版本。

内容的提问来源于stack exchange,提问作者Diego Ulloa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:09:16