constTween={Linear:(t:number,b:number,c:number,d:number)=>(c*t)/d+b,Quad:{easeIn:(t:number,b:number,c:number,d:number)=>c*(t/=d)*t+b,easeOut:(t:number,b:number,c:number,d:number)=>-c*(t/=d)*(t-2)+b,easeInOut:(t:number,b:number,c:number,d:number)=>((t/=d/2){const[name,func]=tween.split('.');if(!func)returnTween.Linear;//Tween[name]这里会报错//elementimplicitlyhasananytypebecauseexpressionoftypestringcantbeusedtoindexreturnTween[name][func];};谢过各位大佬
2 回答

慕勒3428872
TA贡献1848条经验 获得超6个赞
TypeScript目前还不支持字面量类型拆分组合,你可以Tween扁平化,不搞多层。强制转换split出来的类型,这需要你同时手动维护两个type。或者tween用string类型,对split出来的结果做额外判断,确保Tween中有对应的域。按2的例子:constTween={Linear:(t:number,b:number,c:number,d:number)=>(c*t)/d+b,Quad:{easeIn:(t:number,b:number,c:number,d:number)=>c*(t/=d)*t+b,easeOut:(t:number,b:number,c:number,d:number)=>-c*(t/=d)*(t-2)+b,easeInOut:(t:number,b:number,c:number,d:number)=>((t/=d/2)<1?(c/2)*t*t+b:(-c/2)*(--t*(t-2)-1)+b),}}typeTweenFunc=|'Linear'|'Quad.easeIn'|'Quad.easeOut'|'Quad.easeInOut';+typeTweenNameFuncPair=+|['Linear']+|['Quad','easeIn']+|['Quad','easeOut']+|['Quad','easeInOut']exportdefault(tween:TweenFunc)=>{+constpair=tween.split('.')asTweenNameFuncPair;+if(!pair[1])returnTween.Linear;+returnTween[pair[0]][pair[1]];};
添加回答
举报
0/150
提交
取消