如何在TypeScript接口的对象字面量类型中添加属性?
如何通过接口合并为嵌套对象类型添加属性
现有库中定义了如下类型:
interface DefaultSession { user?: { name?: string | null; email?: string | null; image?: string | null; }; expires: ISODateString; }
如果要直接给DefaultSession接口添加字段,直接重新声明接口即可:
interface DefaultSession { role?: string }
但如果要给嵌套的user对象添加role属性,不能直接修改外层接口,需要通过以下步骤实现:
- 先声明一个与原
user结构匹配的命名接口,让后续能通过接口合并扩展它:
interface DefaultSessionUser { name?: string | null; email?: string | null; image?: string | null; }
- 合并这个命名接口,添加需要的
role属性:
interface DefaultSessionUser { role?: string | null; }
- 重新声明
DefaultSession接口,将user的类型指定为扩展后的DefaultSessionUser:
interface DefaultSession { user?: DefaultSessionUser; }
完成后,DefaultSession的user属性就会包含新增的role字段,最终类型结构如下:
interface DefaultSession { user?: { name?: string | null; email?: string | null; image?: string | null; role?: string | null; }; expires: ISODateString; }
核心逻辑是利用TypeScript的接口合并规则:同名接口会自动合并属性。把嵌套的匿名对象转为命名接口后,就能通过合并机制扩展其属性,再重新关联到外层接口上。
内容的提问来源于stack exchange,提问作者Inda Vidjool
相关产品推荐
相关产品推荐

