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

TypeScript部分类型化解构对象参数:能否简化函数签名?

更简洁的解构对象参数函数签名写法

针对你给出的TypeScript函数,确实有更简洁的写法,既不用在类型里显式声明a、b,还能满足类型约束需求,下面是两种实用方案:

方案1:用索引签名允许任意属性(适合不关心a、b具体类型的场景)

如果a、b可以是任意类型,只需要强制c为number,可以用索引签名省略a、b的显式声明:

function foo({ a, b, c }: { c: number; [key: string]: unknown }) {
  // 你的业务逻辑
}

这里[key: string]: unknown表示除了c之外,对象可以有任意字符串键的属性,a、b会被自动推断为unknown类型。

方案2:用泛型保留a、b的原始类型(需要类型推断的场景)

如果希望TypeScript自动推断a、b的实际类型,同时强制c必须是number,可以用泛型实现:

function foo<T extends { c: number }>({ a, b, c }: T) {
  // 这里a、b的类型会根据调用时传入的参数自动推断
}

// 调用示例:
foo({ a: "test", b: true, c: 456 }); // a会被推断为string,b为boolean

这种写法不仅省略了a、b的类型声明,还能让函数获得更精准的类型提示,灵活性更高。

另外要注意:你原始代码里的类型声明(只写a,、b,不指定类型)在严格模式下是不合法的,TypeScript会抛出类型错误,所以必须通过上述方式或显式指定类型来修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:07:13