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

如何为对象/数组创建判断指定索引存在的TypeScript类型守卫?

TypeScript类型守卫:判断对象/数组指定索引值为数字的实现与问题解决

我希望为对象或数组创建一个TypeScript类型守卫,用于判断其是否包含指定索引(无论该索引是属性还是数组下标),且该索引对应的值为数字。现有如下函数实现及使用示例:

export function hasIndex(v: unknown, i = 0): v is [typeof keyof i] {
    const p = (v as Record<PropertyKey, unknown>)?.[i];
    return typeof p === 'number' || p instanceof Number;
}

使用示例:

export function extractIndex(v: unknown, i = 0) {
    let x = 0;
    if (hasIndex(v, i)) {
        x = v[i]; // <-- 期望: `v[i]`类型为`number`,而非`number | undefined`
    }
    return x;
}

已解决

感谢@jcalz和@Alexander Nenashev!我之前完全没想到能在参数里这么用as。extractIndex<K extends number>的细节解决了@jcalz之前指出的问题,但我还有个疑问:既然参数默认值是数字,TypeScript难道不能自动推断类型吗?不管怎样,真的非常感谢!找到这个解决方案前我碰了不少壁,但学会之后发现其实很简单。

{ [i in K]: number }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:27:02