types: make Client.on() compatible with esnext.disposable in TS5.6+ (#10773)

This commit is contained in:
René
2025-02-24 09:39:22 +00:00
committed by GitHub
parent ebfd52695e
commit 45552faf02
2 changed files with 12 additions and 2 deletions

View File

@@ -1029,6 +1029,16 @@ export type If<Value extends boolean, TrueResult, FalseResult = null> = Value ex
? FalseResult
: TrueResult | FalseResult;
/** @internal */
type AsyncEventIteratorDisposability =
ReturnType<typeof EventEmitter.on> extends AsyncDisposable ? AsyncDisposable : {};
/** @internal */
interface AsyncEventIterator<Params extends any[]>
extends AsyncIterableIterator<Params>,
AsyncEventIteratorDisposability {
[Symbol.asyncIterator](): AsyncEventIterator<Params>;
}
export class Client<Ready extends boolean = boolean> extends BaseClient {
public constructor(options: ClientOptions);
private actions: unknown;
@@ -1049,7 +1059,7 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
eventEmitter: Emitter,
eventName: Emitter extends Client ? Event : string | symbol,
options?: { signal?: AbortSignal | undefined },
): AsyncIterableIterator<Emitter extends Client ? ClientEvents[Event] : any[]>;
): AsyncEventIterator<Emitter extends Client ? ClientEvents[Event] : any[]>;
public application: If<Ready, ClientApplication>;
public channels: ChannelManager;

View File

@@ -1322,7 +1322,7 @@ client.on('guildCreate', async g => {
// EventEmitter static method overrides
expectType<Promise<[Client<true>]>>(Client.once(client, 'ready'));
expectType<AsyncIterableIterator<[Client<true>]>>(Client.on(client, 'ready'));
expectAssignable<AsyncIterableIterator<[Client<true>]>>(Client.on(client, 'ready'));
client.login('absolutely-valid-token');