const enum EventList {
aa,bb,cc,dd,ee
}
type EventDataType = {
event:EventList // 当event不同时,参数的数量也不同
par1:string
par2:number
} & (
{
event:EventList.aa
par1:`data_${number}`
par2:number
} | {
event:EventList.bb
par1:`array_${number}`
par2:number
par3:number[]
}
)
function listen(event:EventList, callback:(data:EventDataType)=>void):void
// 以及代码中的使用片段
{
let data:EventDataType
switch(value){
case 0:case 1:
data = {
event:EventList.aa,
par1:'data_11',
par2:value
}
break;
case 2:case 3:
data = {
event:EventList.bb,
par1:'array_11',
par2:value,
par3:[1,2,3]
}
break;
}
}
我现在希望重写listen的声明,使得两个参数可以关联起来,就像
function listen<T extends keyof EventList>(event:T, callback:(data:EventDataType<T>)=>void):void
但是突然一下子到处都飘红了。希望有个比较理想的处理方案,请各位大佬帮帮我
不知道你要的是不是这个。