type = PanelRequire = string | Object
interface AllEvent {
event1: [number, string]
event2: [Array<>, number, Object]
ToggleClass: [PanelRequire, string, boolean]
AddClass: [PanelRequire, string]
}
function FireEvent<
T extends panoramaEventDeclarations,
K extends keyof T,
>(event: K, ...args: T[K]):void {// args报错:rest 参数必须是数组类型。
action(event, ...args)
// args报错:类型“T[K]”必须具有返回迭代器的 "[Symbol.iterator]()" 方法。
// event报错:类型“string | number | symbol”的参数不能赋给类型“string”的参数。
// 不能将类型“number”分配给类型“string”。
}
对于函数 FireEvent 根据不同的事件名 有不同的参数数量和要求,明确每个参数的类型。
事件数量巨大,并不能全部写类型重载。
用接口还是类型实现都可以。方便业务中手动增加事件的最好。
这样可以吗?