如何在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
相关产品推荐
相关产品推荐

