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

Typescript如何确保函数返回值为指定类型解决联合类型赋值报错

解决方案

问题本质是默认情况下TypeScript无法根据入参的布尔值自动推导对应的返回类型,只会将返回值推导为string | Date联合类型,因此赋值给固定类型的变量时会触发类型报错,可通过以下两种类型安全的方式解决:

方案1:使用函数重载(最直观)

适合参数分支明确的场景,先声明不同入参对应的返回类型,再写函数实现,调用时TS会自动匹配对应重载规则:

// 重载签名:明确不同入参对应的返回类型
function getStringOrDate(asString: true): string
function getStringOrDate(asString: false): Date
function getStringOrDate(): string // 适配默认参数无入参的调用场景
// 实现签名
function getStringOrDate(asString = true) {
  if (asString) {
    return new Date().toLocaleDateString()
  } else {
    return new Date()
  }
}

// 调用时自动推导对应返回类型,无报错
const dateStr = getStringOrDate(true) // 推导类型为string
const today = getStringOrDate(false) // 推导类型为Date
const defaultRes = getStringOrDate() // 推导类型为string

方案2:使用泛型+条件类型(更简洁,适合箭头函数)

如果习惯使用箭头函数,用泛型绑定入参和返回值的关系更便捷:

const getStringOrDate = <T extends boolean = true>(asString: T = true as T): T extends true ? string : Date => {
  if (asString) {
    return new Date().toLocaleDateString() as T extends true ? string : Date
  } else {
    return new Date() as T extends true ? string : Date
  }
}

// 调用效果和重载完全一致
const today: Date = getStringOrDate(false) // 无类型报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:05