如何用TypeScript定义含固定id与动态日期键的接口?
Firebase Firestore 数据结构对应的TypeScript接口解决方案
你的Firebase Firestore数据结构如下:
{ id: 'user_id_1', '26-08-23': [{...other object}], '27-08-23': [{...another object}] ... }
你尝试的继承方式失败,核心原因是:带有索引签名的接口会强制所有显式声明的属性值类型匹配索引签名的要求——你的DateMappedObject规定所有字符串键的值必须是UserAttendanceDateMap类型,但id是字符串类型,两者类型冲突导致报错。
以下是可行的解决方案:
方案:使用交叉类型
将基础索引签名接口与包含id的对象类型交叉,既能保留日期键的索引能力,又能正确声明id属性的类型:
export interface DateMappedObject { [date: string]: UserAttendanceDateMap; } export type UserAttendance = DateMappedObject & { id: string; };
设计原因说明
- 该结构支持一次查询获取所有数据,减少网络请求次数
- 每月数据量有限,不存在扩展性顾虑
- 日期键可直接作为快速索引,方便快速填充日历组件的展示数据
内容的提问来源于stack exchange,提问作者ady
相关产品推荐
相关产品推荐

