TypeScript同类型函数参数是否有简洁的类型标注简写方式?
TypeScript 简化重复参数类型标注方案
完全可行,不需要单独定义命名接口就能省去重复的参数类型标注,以下是几种常用写法,适配不同的传参习惯:
- 保留原有位置传参逻辑(调用形式为
setColor(255, 0, 0, 1)):用元组类型结合剩余参数一次性声明所有参数类型,不需要逐个给参数写:number标注
function setColor(...[r, g, b, a]: [number, number, number, number]) { // 函数内部可直接使用r、g、b、a变量,类型自动推导为number }
这个写法和你最开始逐个标注参数类型的函数签名完全等价,调用时没有任何写法变化,也不会丢失类型检查能力。
- 如果你接受对象形式传参(可以避免位置传参容易记混参数顺序的问题),可以直接在参数位写内联对象类型,不需要额外抽离interface声明:
function setColor({r, g, b, a}: {r: number, g: number, b: number, a: number}) { // 内部直接使用解构后的变量即可,调用形式为setColor({r:255, g:0, b:0, a:1}) }
- 如果后续有其他函数需要复用这套参数类型,不需要重复写类型定义,直接用TS内置的
Parameters工具类型从已有函数上提取参数类型即可:
// 新函数参数和setColor完全一致,不需要重复写四次number类型声明 function updateColor(...args: Parameters<typeof setColor>) { const [r, g, b, a] = args // 业务逻辑 }
要是这套颜色参数结构后面要在很多地方复用,也可以用
type别名做一次声明,写法比interface更简洁,也不属于你提到的单独定义接口的实现方式。
内容的提问来源于stack exchange,提问作者keenshark
相关产品推荐
相关产品推荐

