TypeScript报错ts(2322):number不可分配给string类型解决方案咨询
解决TypeScript中flexGrow赋值的类型错误
你遇到的错误和boxA的类型声明无关——boxA已经正确声明为HTMLElement了。问题出在DOM元素的style.flexGrow属性要求接收字符串类型的值,而你直接传了数字0,TypeScript会严格校验类型匹配,所以报错。
解决方法很简单,把数字转换成字符串即可:
boxA!.style.flexGrow = '0';
或者用模板字符串写法(效果一致):
boxA!.style.flexGrow = `${0}`;
修改后的完整代码片段:
var handler = document.querySelector('.handler') as HTMLElement; var wrapper = handler!.closest('.wrapper') as HTMLElement; var boxA = wrapper!.querySelector('.box') as HTMLElement; var isHandlerDragging = false; document.addEventListener('mousedown', function(e) { if (e.target === handler) { isHandlerDragging = true; } }); document.addEventListener('mousemove', function(e) { if (!isHandlerDragging) { return false; } var containerOffsetLeft = wrapper!.offsetLeft; var pointerRelativeXpos = e.clientX - containerOffsetLeft; boxA!.style.width = (Math.max(boxAminWidth, pointerRelativeXpos - 8)) + 'px'; boxA!.style.flexGrow = '0'; // 改为字符串类型的0 });
补充说明:所有DOM元素的style对象属性,本质上都是对应CSS属性的字符串表示,哪怕是数值类的属性(比如width、flexGrow),都需要以字符串形式赋值,这是CSSOM的规范要求,TypeScript只是帮你严格执行了这个类型规则。
内容的提问来源于stack exchange,提问作者Tallion 22
相关产品推荐
相关产品推荐

