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

为何Lodash的_.sample函数在两种场景下返回类型不同?

为什么Lodash的_.sample在两种TypeScript场景下返回类型不同?

核心原因是TypeScript对数组的类型推断逻辑存在差异:

  • 示例1:直接传入字面量数组
    当你直接将[1, 2, 3]作为参数传给_.sample时,TypeScript会把这个字面量推断为只读元组类型readonly [1, 2, 3]。这个类型明确表示数组固定包含3个元素,不可能是空数组。Lodash的类型定义针对非空元组场景,会直接返回元组内元素的类型(此处为number),不会包含undefined。

  • 示例2:赋值给变量后传入
    当你把[1, 2, 3]赋值给const arr时,TypeScript默认会将arr推断为普通数组类型number[]。这种类型的数组允许后续被修改(比如通过arr.length = 0清空),TypeScript无法保证调用_.sample时数组一定非空。而_.sample在传入空数组时会返回undefined,因此类型推断结果为number | undefined。

如果想让示例2的返回类型也为number,可以手动将数组指定为只读元组:

const arr = [1, 2, 3] as const;
const myNumber = _.sample(arr);
// 此时myNumber的类型为1 | 2 | 3,可通过类型缩小统一为number

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:40:05