TypeScript在调用参数一致的函数的时候如何确认是传入的哪个参数呢?

作者站长头像
站长
· 阅读数 18

typescript有如下代码:

const func = (a?: {x: number, y: number}, b?: {x: number, y: number}) => {
  // 
}


func({x: 1, y: 2})

请问一下,我们在调用的时候,如第二行,直接传{x:1, y:2} 请问一下,这里不能这样传输:

func(a: {x: 1, y: 2})

那么在执行代码的时候,如何进行确定是a还是b呢?

回复
1个回答
avatar
test
2024-06-29

这跟 TS 有什么关系?TS 就是个类型标记,代码执行的时候只剩下 JS。

去掉类型,就只是:

const func = (a, b) => {
  // 
}
func(arg1, arg2);

实参跟形参是一一对应的,传入的第一个参数 arg1 就对应 a,传入的第二个参数 arg2 就对应 b,这又不可能串位置。

即便第一个参数是个可选参数,你想跳过第一个、直接指定第二个参数,那你也得传个 undefined 进去才行:

func(undefined, { x: 1, y: 1 });

如果你想要的是更彻底一点儿的,形参顺序跟实参顺序不用严格对照,可以直接:

func(b: { x: 1, y: 1 });

这样给第二个参数 b 传值。

那很遗憾,JS/TS 没这样的语法特性。其他语言中倒是有类似的特性,比如 C# 中的命名参数(Named Arguments),Ruby 中的关键字参数(Keyword Arguments)等等。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容