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

如何为isString函数编写正确JSDoc签名以实现类型窄化?

实现能触发类型窄化的字符串类型守卫

要让if(isString(x)){}代码块内的x被识别为string类型,你需要使用类型谓词的JSDoc写法,而非之前的联合函数类型定义。正确实现如下:

/**
 * 检查输入是否为字符串类型
 * @param {any} obj - 待检查的对象
 * @returns {obj is string} 输入为字符串时返回true,否则返回false
 */
function isString(obj) {
  return Object.prototype.toString.call(obj) === "[object String]";
}

为什么之前的写法无效

你之前使用的((obj:string)=>true)|((obj:any)=>false)联合类型,仅描述了函数的输入输出对应关系,但没有告诉类型检查器这是一个类型守卫,因此无法触发类型窄化逻辑,if块内的x类型不会被自动更新。

而@returns {obj is string}这个JSDoc标记,明确告知类型检查器:当函数返回true时,参数obj的类型就是string,类型检查器会据此在if块内自动将x的类型窄化为string。

内容的提问来源于stack exchange,提问作者Carlos Pinzón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:48:27