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

鑫平~ 阅读 96

我在写一个工具函数,想让某个参数是可选的,但加了问号后还是报错说类型不匹配,是不是我写法有问题?

比如下面这样写:

function greet(name: string, age?: number) {
  return <code>Hello ${name}, you are ${age} years old</code>;
}

调用 greet('Alice') 没问题,但 TS 提示在模板字符串里 age 可能是 undefined,该怎么处理才对?

我来解答 赞 8 收藏
二维码
手机扫码查看
1 条解答
欧阳桂霞
这个问题很简单,可选参数 age? 的类型实际上是 number | undefined,所以TS提示你处理是对的。

最直接的办法就是在模板字符串里给个默认值,用双问号 ?? 或者 || 都可以:

function greet(name: string, age?: number) {
return Hello ${name}, you are ${age ?? 0} years old;
}


?? 是空值合并运算符,只有当 agenullundefined 时才用右边的默认值。如果你希望 0 也算"没填"并用默认值,那就用 ||

function greet(name: string, age?: number) {
return Hello ${name}, you are ${age || 'unknown'} years old;
}


另一个常见做法是先在函数开头给参数一个默认值,这样类型就明确了:

function greet(name: string, age?: number) {
const userAge = age ?? 0;
return Hello ${name}, you are ${userAge} years old;
}


这样TS就不会报错了,而且代码可读性也更好一点。
点赞
2026-03-18 13:08