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

如何在TypeScript中定义可递归引用自身的Dir类型?

解决方法

你遇到的错误本质是TypeScript的索引签名规则:索引签名定义了对象所有字符串键对应的类型,你写的[key: string]: Dir要求包括_size在内的所有键都必须是Dir类型,但_size实际是number,类型不兼容导致报错。

要实现「所有非_size的键都是Dir类型」的递归结构,可以用交叉类型结合Omit工具类型拆分固定属性和动态索引:

type Dir = { _size: number } & Omit<Record<string, Dir>, '_size'>;

这个类型的含义是:

  • 必须包含_size: number属性
  • 除_size外,任意字符串键对应的类型都是Dir(实现递归嵌套)

用这个类型约束你的tree对象,TypeScript就能正确识别所有嵌套结构:

const tree: Dir = {
    _size: 0,
    a: {
        _size: 0,
        b: {
            _size: 0,
        }
    },
    c: {
        _size: 0
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:15:29