diff --git a/typings/index.d.ts b/typings/index.d.ts index 47123c7e8..2fe9558d8 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -3313,7 +3313,6 @@ export interface BaseApplicationCommandOptionsData { name: string; description: string; required?: boolean; - autocomplete?: boolean; } export interface UserApplicationCommandData extends BaseApplicationCommandData { @@ -3346,14 +3345,27 @@ export interface ApplicationCommandChannelOption extends BaseApplicationCommandO channelTypes?: (keyof typeof ChannelTypes)[]; } +export interface ApplicationCommandAutocompleteOption extends BaseApplicationCommandOptionsData { + type: + | 'STRING' + | 'NUMBER' + | 'INTEGER' + | ApplicationCommandOptionTypes.STRING + | ApplicationCommandOptionTypes.NUMBER + | ApplicationCommandOptionTypes.INTEGER; + autocomplete: true; +} + export interface ApplicationCommandChoicesData extends BaseApplicationCommandOptionsData { type: CommandOptionChoiceResolvableType; choices?: ApplicationCommandOptionChoice[]; + autocomplete?: false; } export interface ApplicationCommandChoicesOption extends BaseApplicationCommandOptionsData { type: Exclude; choices?: ApplicationCommandOptionChoice[]; + autocomplete?: false; } export interface ApplicationCommandNumericOptionData extends ApplicationCommandChoicesData { @@ -3403,6 +3415,7 @@ export type ApplicationCommandOptionData = | ApplicationCommandNonOptionsData | ApplicationCommandChannelOptionData | ApplicationCommandChoicesData + | ApplicationCommandAutocompleteOption | ApplicationCommandNumericOptionData | ApplicationCommandSubCommandData; diff --git a/typings/tests.ts b/typings/tests.ts index ffe003437..ef693f983 100644 --- a/typings/tests.ts +++ b/typings/tests.ts @@ -30,7 +30,6 @@ import { CommandInteraction, CommandInteractionOption, CommandInteractionOptionResolver, - CommandOptionChoiceResolvableType, CommandOptionNonChoiceResolvableType, Constants, ContextMenuInteraction, @@ -447,6 +446,66 @@ client.on('ready', async () => { // This is to check that stuff is the right type declare const assertIsPromiseMember: (m: Promise) => void; +const baseCommandOptionData = { + name: 'test', + description: 'test', +}; + +assertType({ + ...baseCommandOptionData, + type: 'STRING', + // @ts-expect-error + autocomplete: true, + choices: [], +}); + +assertType({ + ...baseCommandOptionData, + type: 'STRING', + autocomplete: false, + choices: [], +}); + +assertType({ + ...baseCommandOptionData, + type: 'STRING', + choices: [], +}); + +assertType({ + ...baseCommandOptionData, + type: 'NUMBER', + // @ts-expect-error + autocomplete: true, + choices: [], +}); + +assertType({ + ...baseCommandOptionData, + type: 'INTEGER', + // @ts-expect-error + autocomplete: true, + choices: [], +}); + +assertType({ + ...baseCommandOptionData, + type: 'NUMBER', + autocomplete: true, +}); + +assertType({ + ...baseCommandOptionData, + type: 'STRING', + autocomplete: true, +}); + +assertType({ + ...baseCommandOptionData, + type: 'INTEGER', + autocomplete: true, +}); + client.on('guildCreate', async g => { const channel = g.channels.cache.random(); if (!channel) return; @@ -820,12 +879,6 @@ declare const applicationNonChoiceOptionData: ApplicationCommandOptionData & { applicationNonChoiceOptionData.choices; } -declare const applicationChoiceOptionData: ApplicationCommandOptionData & { type: CommandOptionChoiceResolvableType }; -{ - // Choices should be available. - applicationChoiceOptionData.choices; -} - declare const applicationSubGroupCommandData: ApplicationCommandSubGroupData; { assertType<'SUB_COMMAND_GROUP' | ApplicationCommandOptionTypes.SUB_COMMAND_GROUP>(