TypeScript里怎么正确声明一个可选的函数参数? 鑫平~ 提问于 2026-03-18 09:56:19 阅读 96 前端 我在写一个工具函数,想让某个参数是可选的,但加了问号后还是报错说类型不匹配,是不是我写法有问题? 比如下面这样写: function greet(name: string, age?: number) { return <code>Hello ${name}, you are ${age} years old</code>; } 调用 greet('Alice') 没问题,但 TS 提示在模板字符串里 age 可能是 undefined,该怎么处理才对? 我来解答 赞 8 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 欧阳桂霞 Lv1 这个问题很简单,可选参数 age? 的类型实际上是 number | undefined,所以TS提示你处理是对的。 最直接的办法就是在模板字符串里给个默认值,用双问号 ?? 或者 || 都可以: function greet(name: string, age?: number) { return Hello ${name}, you are ${age ?? 0} years old; } ?? 是空值合并运算符,只有当 age 是 null 或 undefined 时才用右边的默认值。如果你希望 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 加载更多 相关推荐 2 回答 16 浏览 TypeScript里怎么正确声明一个可选的函数参数? 我写了一个函数,想让第二个参数是可选的,但TS一直报错说类型不匹配。试过加问号和默认值都不行,是不是哪里写错了? 比如下面这样: function greet(name: string, title?... 美菊 前端 2026-03-09 21:01:20 2 回答 58 浏览 TypeScript 中如何正确声明一个可选的函数参数? 我在写一个工具函数,想让某个参数是可选的,但 TS 一直报错说类型不匹配。我试过用 param?: string,但调用时传 undefined 还是提示错误,是不是哪里写错了? 比如下面这个函数: ... UI国凤 前端 2026-03-06 12:52:21 2 回答 39 浏览 uni-app 中用 TypeScript 写页面,props 类型怎么定义才不报错? 我在 uni-app 里用 TypeScript 写组件,想给 props 加类型,但总是提示类型不匹配或者 undefined。明明按照文档写了,但还是不行,是不是写法有问题? 比如下面这段代码,我... A. 毓珂 移动 2026-02-26 13:44:18 1 回答 18 浏览 Monorepo里怎么让不同包共享TypeScript配置? 我用pnpm workspace搭了个Monorepo,里面有几个React组件包和一个工具函数包。现在每个包都复制了一份tsconfig.json,改起来太麻烦了,想抽成一份共享的配置。 试过在根目... Tr° 羽墨 前端 2026-03-24 17:32:23 2 回答 43 浏览 TypeScript 项目开启 strict 模式后 Tree Shaking 失效了? 我用 Vite + TypeScript 搭了个项目,之前 Tree Shaking 正常,但一开 strict: true 就发现打包体积变大了,没用的代码没被删掉。是不是 tsconfig 的配置... 程序猿奕瑞 优化 2026-03-05 12:12:18 2 回答 19 浏览 TypeScript里怎么正确处理可选属性的类型推断? 我在写一个接口的时候,有些字段是可选的,比如 user?: string,但当我从 API 拿到数据后直接解构赋值,TS 就报错说可能为 undefined。我试过加 ! 断言,但感觉不太安全,有没有... Code°春莉 前端 2026-03-01 10:07:26 2 回答 44 浏览 TypeScript项目中Tree Shaking没生效,如何排查配置问题? 我按照官方文档配置了TypeScript项目,打包时发现没摇树,打包体积还是很大。检查了tsconfig.json的module和target设置,也用了rollup打包,但导出的代码里还是包含未使用... FSD-法霞 优化 2026-02-16 10:35:25 2 回答 57 浏览 Nuxt3中使用TypeScript时为什么组件props类型报错? 在Nuxt3项目里用TypeScript定义组件props时遇到了奇怪的问题。按照文档写法: export default defineComponent({ props: { user: { typ... 照涵 Dev 框架 2026-02-16 00:47:34 2 回答 50 浏览 Vue项目用了@babel/preset-typescript为什么还是报TypeScript语法错误? 在Vue3项目里配置了Babel和@babel/preset-typescript,但运行时还是提示“Unexpected token ‘;’ in JSON at position 12”这种错误.... UX炳錦 工具 2026-01-25 20:59:23 1 回答 36 浏览 Babel插件里怎么判断一个节点是不是箭头函数? 我在写一个Babel插件,想在遍历AST的时候识别出箭头函数,但不确定该用什么条件判断。试过 node.type === 'ArrowFunctionExpression',但有时候好像不生效? 比如... 慕容爱军 工具 2026-03-21 20:01:17
age?的类型实际上是number | undefined,所以TS提示你处理是对的。最直接的办法就是在模板字符串里给个默认值,用双问号
??或者||都可以:??是空值合并运算符,只有当age是null或undefined时才用右边的默认值。如果你希望0也算"没填"并用默认值,那就用||:另一个常见做法是先在函数开头给参数一个默认值,这样类型就明确了:
这样TS就不会报错了,而且代码可读性也更好一点。