萌新求教!typescript对象里中括号引用应该怎么写才正确?各位有什么建议?

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';
exportdefault(tween:TweenFunc)=>{
const[name,func]=tween.split('.');
if(!func)returnTween.Linear;
//Tween[name]这里会报错
//elementimplicitlyhasananytypebecauseexpressionoftypestringcantbeusedtoindex
returnTween[name][func];
};
谢过各位大佬
ABOUTYOU
浏览 397回答 2
2回答

汪汪一只猫

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){+constpair=tween.split('.')asTweenNameFuncPair;+if(!pair[1])returnTween.Linear;+returnTween[pair[0]][pair[1]];};
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript