You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:24:56