为了账号安全,请及时绑定邮箱和手机立即绑定

萌新!typescript对象里中括号引用应该怎么写才正确?万分感谢

萌新!typescript对象里中括号引用应该怎么写才正确?万分感谢

SMILET 2019-11-03 09:36:32
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]];
};
                            
查看完整回答
反对 回复 2019-11-03
  • 2 回答
  • 0 关注
  • 1240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号