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

TypeScript函数对象入参的默认参数设置方法咨询

解决TypeScript对象参数同时指定类型与默认值的问题

嘿,我完全懂你想要的效果——给函数的对象参数像标量值那样,同时保留类型约束和默认值,对吧?直接在类型字面量里加= 5这种默认值确实会触发TypeScript错误,因为类型注解的语法里不允许包含默认值的赋值逻辑。下面给你几种实用的实现方案:

方案1:先定义独立类型/接口,再设置参数默认值

这是最推荐的写法,类型可复用,代码结构也清晰:

// 先抽离对象的类型定义
interface MyObj {
  val1: number;
  val2: number;
}

// 给参数指定类型,同时设置默认对象
function someFunction(myObj: MyObj = { val1: 5, val2: 10 }) {
  console.log(myObj.val1, myObj.val2);
}

// 调用示例
someFunction(); // 输出 5 10
someFunction({ val1: 20, val2: 30 }); // 输出 20 30

方案2:参数解构+属性默认值(适合直接用属性的场景)

如果函数内部直接需要使用对象的属性而不是整个对象,用解构的方式更便捷,还能给每个属性单独设默认值:

// 给解构后的参数整体加类型注解,同时给属性设默认值
// 注意:要支持无参数调用,得给整个解构表达式加`= {}`的默认值
function someFunction({ val1 = 5, val2 = 10 }: { val1: number; val2: number } = {}) {
  console.log(val1, val2);
}

// 调用示例
someFunction(); // 输出 5 10
someFunction({ val1: 15 }); // 输出 15 10

方案3:类型断言简化写法(适合临时简单场景)

如果不想单独定义接口/类型,也可以用类型断言直接给默认对象指定类型,适合快速实现的小场景:

function someFunction(myObj = { val1: 5, val2: 10 } as { val1: number; val2: number }) {
  console.log(myObj.val1, myObj.val2);
}

总结一下,方案1的扩展性最好,适合需要复用类型的场景;方案2更适合函数内部直接操作属性的情况;方案3则是临时快速实现的简化写法。

内容的提问来源于stack exchange,提问作者Tomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:08