TypeScript类型报错:IResizeHandleSettingsDetail无法赋值给IResizeHandleSettings
报错原因
- 两个接口的定位完全不同:
IResizeHandleSettings是所有拖拽方向配置的总容器类型,要求必须包含left/right/top/bottom四个属性,每个属性值是单个方向配置的IResizeHandleSettingsDetail类型。
你加的索引签名只是允许你用任意字符串key访问该容器的属性,并且告知TS返回值类型为IResizeHandleSettingsDetail,不会改变该接口本身的结构要求。 - 你给
selectedHandleSettings.settings声明的类型是IResizeHandleSettings[],意思是这个数组要存储整个配置总容器对象,但你实际push的是this.handleSettings[positionKey]——这是单个方向的配置项,类型为IResizeHandleSettingsDetail,二者类型完全不匹配,所以抛出类型错误。
修复方案
只需要修改settings的类型声明即可:
selectedHandleSettings: { x: string | undefined | null; y: string | undefined | null; settings: IResizeHandleSettingsDetail[]; // 替换原有的IResizeHandleSettings类型 };
补充优化:如果你的positionKey只有left/right/top/bottom四种合法取值,还可以将方法参数的类型修改为positionKey: keyof IResizeHandleSettings,进一步收窄类型范围,避免传入非法key导致运行时问题。
内容的提问来源于stack exchange,提问作者methuselah
相关产品推荐
相关产品推荐

