From 08419561edd710a6574b5e1449bf5dc1040580d5 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Wed, 1 Sep 2021 06:07:26 -0400 Subject: [PATCH] typings: Collector filter parameter inference (#6574) --- typings/index.d.ts | 23 +++++++++++++---------- typings/tests.ts | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/typings/index.d.ts b/typings/index.d.ts index 2eacf62eb42e..7e225e7f7284 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -1149,7 +1149,7 @@ type InteractionCollectorReturnType : InteractionCollector; -type InteractionReturnType = T extends +type InteractionExtractor = T extends | MessageComponentType | MessageComponentTypes ? MappedInteractionCollectorOptions[T] extends InteractionCollectorOptions @@ -1157,13 +1157,16 @@ type InteractionReturnType = - | ({ componentType?: T } & InteractionCollectorOptionsResolvable) - | InteractionCollectorOptions; +type MessageCollectorOptionsParams = + | { + componentType?: T; + } & InteractionCollectorOptions>; -type AwaitMessageCollectorOptionsParams = - | ({ componentType?: T } & Pick>) - | AwaitMessageComponentOptions; +type AwaitMessageCollectorOptionsParams = + | { componentType?: T } & Pick< + InteractionCollectorOptions>, + keyof AwaitMessageComponentOptions + >; export class Message extends Base { public constructor(client: Client, data: RawMessageData); @@ -1212,9 +1215,9 @@ export class Message extends Base { public webhookId: Snowflake | null; public flags: Readonly; public reference: MessageReference | null; - public awaitMessageComponent( - options?: AwaitMessageCollectorOptionsParams, - ): Promise>; + public awaitMessageComponent< + T extends MessageComponentType | MessageComponentTypes | undefined = MessageComponentTypes.ACTION_ROW, + >(options?: AwaitMessageCollectorOptionsParams): Promise>; public awaitReactions(options?: AwaitReactionsOptions): Promise>; public createReactionCollector(options?: ReactionCollectorOptions): ReactionCollector; public createMessageComponentCollector< diff --git a/typings/tests.ts b/typings/tests.ts index 8eea53e86303..708e1ba031ed 100644 --- a/typings/tests.ts +++ b/typings/tests.ts @@ -510,6 +510,53 @@ client.on('messageCreate', message => { // Verify that additional options don't affect default collector types. const semiDefaultCollector = message.createMessageComponentCollector({ interactionType: 'APPLICATION_COMMAND' }); assertType>(semiDefaultCollector); + + // Make sure filter parameters are properly inferred. + message.createMessageComponentCollector({ + filter: i => { + assertType(i); + return true; + }, + }); + + message.createMessageComponentCollector({ + componentType: 'BUTTON', + filter: i => { + assertType(i); + return true; + }, + }); + + message.createMessageComponentCollector({ + componentType: 'SELECT_MENU', + filter: i => { + assertType(i); + return true; + }, + }); + + message.awaitMessageComponent({ + filter: i => { + assertType(i); + return true; + }, + }); + + message.awaitMessageComponent({ + componentType: 'BUTTON', + filter: i => { + assertType(i); + return true; + }, + }); + + message.awaitMessageComponent({ + componentType: 'SELECT_MENU', + filter: i => { + assertType(i); + return true; + }, + }); }); client.on('interaction', async interaction => {