为了减少对老化灰质的认知负担,我正在为事件发射器中的特定事件提供自定义重载。
// default signature
function on(event: string | symbol, listener: (...args: any[]) => void): void;
// custom signatures
function on(event: "error", listener: (error: string, code: number) => void): void;
function on(event: "data", listener: (text: string) => void): void;
function on(event: "chunk", listener: (text: string) => void): void;
function on(event: "complete" | "done", listener: (id: number) => void): void;
// most general signature
function on(event: any, listener: (...args: any[]) => void) {
// ...
}
// correctly resolve data as 'string'
on("data", (data) => {});
on("chunk", (data) => {});
// incorrectly resolves id as any from default signature
on("complete", (id) => {});
根据 TypeScript 文档,我在特定重载之后订购了一般重载。
我的问题是;为什么联合类型 ( "complete" | "done") 不能按预期工作,但将它们 ( "data" and "chunk") 分开?