无法从mainStructure的user子类型扩展接口,求解决办法
解决TypeScript接口扩展索引访问类型的报错问题
你遇到的错误是因为TypeScript的interface只能扩展**标识符(比如单独定义的接口/类型名)**或带可选类型参数的限定名,不能直接扩展像mainStructure["user"]这样的索引访问类型。以下是两种不用单独声明独立user接口的解决方法:
方法一:使用type别名替代interface扩展
type类型别名支持直接通过交叉类型合并索引访问类型的属性,代码修改如下:
interface mainStructure { user: { id: number name: string } conversation: { id: number userID: string message: string } } type myUserWithLogin = mainStructure["user"] & { isLogin: boolean }
这里用&交叉运算符把mainStructure["user"]的原有属性和新属性isLogin合并,效果和接口扩展完全一致。
方法二:先提取索引类型为别名,再用interface扩展
先把mainStructure["user"]提取成一个临时type别名,再让interface扩展这个别名,既不破坏原结构的关联性,又符合语法要求:
interface mainStructure { user: { id: number name: string } conversation: { id: number userID: string message: string } } type BaseUser = mainStructure["user"]; interface myUserWithLogin extends BaseUser { isLogin: boolean }
这个临时别名仅用于接口扩展,不会脱离mainStructure的定义,满足你不想单独声明独立user接口的需求。
内容的提问来源于stack exchange,提问作者Tin Sittiyot
相关产品推荐
相关产品推荐

