TypeScript里怎么正确声明一个可选的函数参数?

美菊 阅读 32

我写了一个函数,想让第二个参数是可选的,但TS一直报错说类型不匹配。试过加问号和默认值都不行,是不是哪里写错了?

比如下面这样:

function greet(name: string, title?: string) {
  return <code>${title ? title + &#039; &#039; : &#039;&#039;}${name}</code>;
}
greet('Alice', 'Dr');

调用时明明传了两个参数,为什么还提示“Expected 1 arguments, but got 2”?

我来解答 赞 11 收藏
二维码
手机扫码查看
2 条解答
 ___若惜
看起来你在 TypeScript 中声明可选参数的方式是正确的,但是你的返回值字符串拼接方式有点问题。你用了 HTML 的 标签,这在普通的字符串模板中是不起作用的。另外,错误提示 "Expected 1 arguments, but got 2" 并不是因为你第二个参数是可选的导致的,这可能是编辑器或者环境配置的问题,因为你的代码逻辑本身没有问题。

不过我们先修正一下字符串拼接的部分,确保它能正常工作:

function greet(name: string, title?: string) {
return ${title ? title + ' ' : ''}${name};
}
greet('Alice', 'Dr');


这段代码应该可以正常运行,并且不会报类型不匹配的错误。如果你仍然遇到 "Expected 1 arguments, but got 2" 的提示,尝试重启你的 IDE 或者重新加载项目,有时候这些工具会有缓存问题。

如果问题依然存在,检查一下你的 tsconfig.json 文件,确保没有对参数数量做额外的限制或者其他相关的配置问题。
点赞
2026-03-21 11:20
Top丶恒菽
你这代码没问题啊,TS报错肯定不是因为这个函数定义的问题。最简单的情况是你在其他地方定义过同名的greet函数了,或者有重载声明冲突。

试试把这段代码单独放一个文件里跑:
function greet(name: string, title?: string) {
return ${title ? title + ' ' : ''}${name};
}
greet('Alice', 'Dr');


要是还报错就检查下全局类型声明或者有没有同名函数,这语法绝对没问题。
点赞 1
2026-03-09 21:02