如何在TypeScript对象的回调类型中声明默认参数?
TypeScript对象中回调函数默认参数的类型声明方法
你的问题出在类型定义和函数实现不匹配:虽然你在setStatus的实现里加了默认参数,但Info类型中并没有声明这个参数是可选的,TypeScript的类型检查只认你定义的类型,不认实际的函数实现,所以会报错。
解决方法:修改类型定义,明确参数可选性
有两种等价的方式可以修正类型:
方式1:将参数标记为可选(最常用)
在参数名后加?,表示该参数可以不传:
type Info = { setStatus: (newStatus?: string | null) => void; }; let status: string | null = null; const info: Info = { setStatus: (newStatus: string | null = null) => { status = newStatus; } }; info.setStatus(); // 现在不会报错了
方式2:在类型中声明默认参数(和实现保持一致)
TypeScript允许在函数类型里直接声明默认参数值,和实现的默认值对应:
type Info = { setStatus: (newStatus: string | null = null) => void; }; let status: string | null = null; const info: Info = { setStatus: (newStatus: string | null = null) => { status = newStatus; } }; info.setStatus(); // 正常调用无报错
核心逻辑
TypeScript的类型系统是契约式的:类型定义就是对外暴露的契约,调用方只会根据契约来判断是否合法。只有当契约里明确允许参数可选(或带默认值),调用不传参数的写法才会被类型检查通过。
内容的提问来源于stack exchange,提问作者Fiddle Freak
相关产品推荐
相关产品推荐

