Skip to content

Commit 3da757a

Browse files
feat: support getSubcommand narrowing
1 parent 621ceda commit 3da757a

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

src/lib.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export declare class TypedCommandSubcommandOptions<
3939
> extends ChatInputCommandInteraction<CacheType> {
4040
private subcommandName: K;
4141
public commandName: T['name'];
42-
public options: TypedCommandOptionsResolver<ExtractSubcommandBasicOptions<CommandWithOptions<T>['options'], K>>;
42+
public options: TypedCommandOptionsResolver<ExtractSubcommandBasicOptions<CommandWithOptions<T>['options'], K>, K>;
4343
}
4444

4545
export declare class TypedAutocompleteCommandOptions<
@@ -57,7 +57,7 @@ export declare class TypedAutocompleteSubcommandOptions<
5757
> extends AutocompleteInteraction<CacheType> {
5858
private subcommandName: K;
5959
public commandName: T['name'];
60-
public options: TypedAutocompleteOptionsResolver<ExtractSubcommandBasicOptions<CommandWithOptions<T>['options'], K>>;
60+
public options: TypedAutocompleteOptionsResolver<ExtractSubcommandBasicOptions<CommandWithOptions<T>['options'], K>, K>;
6161
}
6262

6363
// eslint-disable-next-line @typescript-eslint/no-unused-vars

src/resolver.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,12 @@ type AutocompleteDataMapper<T extends CommandOptionBasicData> = {
111111
focused?: true;
112112
};
113113

114-
export interface TypedCommandOptionsResolver<T extends CommandOptionBasicData> extends Omit<CommandInteractionOptionResolver<CacheType>, 'getMessage' | 'getFocused'> {
114+
export interface TypedCommandOptionsResolver<T extends CommandOptionBasicData, S extends string = string> extends Omit<CommandInteractionOptionResolver<CacheType>, 'getMessage' | 'getFocused'> {
115115
get<K extends T['name']>(name: K): NullableData<PickCommandOptionByName<T, K>>;
116116
get<K extends T['name']>(name: K, required: true): CommandDataMapper<PickCommandOptionByName<T, K>>;
117117
get<K extends T['name']>(name: K, required?: boolean): CommandDataMapper<PickCommandOptionByName<T, K>>;
118+
getSubcommand(required?: true): S;
119+
getSubcommand(required: boolean): S | null;
118120
}
119121

120122
export interface TypedCommandOptionsNeverResolver<T extends CommandOptionBasicData> extends Omit<CommandInteractionOptionResolver<CacheType>, 'getMessage' | 'getFocused'> {
@@ -123,10 +125,12 @@ export interface TypedCommandOptionsNeverResolver<T extends CommandOptionBasicDa
123125
get<K extends T['name']>(name: never, required?: never): CommandDataMapper<PickCommandOptionByName<T, K>>;
124126
}
125127

126-
export interface TypedAutocompleteOptionsResolver<T extends CommandOptionBasicData> extends Omit<CommandInteractionOptionResolver<CacheType>, 'getMessage' | 'getUser' | 'getAttachment' | 'getChannel' | 'getMember' | 'getMentionable' | 'getRole'> {
128+
export interface TypedAutocompleteOptionsResolver<T extends CommandOptionBasicData, S extends string = string> extends Omit<CommandInteractionOptionResolver<CacheType>, 'getMessage' | 'getUser' | 'getAttachment' | 'getChannel' | 'getMember' | 'getMentionable' | 'getRole'> {
127129
get<K extends T['name']>(name: K): AutocompleteDataMapper<PickCommandOptionByName<T, K>> | null;
128130
get<K extends T['name']>(name: K, required: true): AutocompleteDataMapper<PickCommandOptionByName<T, K>>;
129131
get<K extends T['name']>(name: K, required?: boolean): AutocompleteDataMapper<PickCommandOptionByName<T, K>> | null;
132+
getSubcommand(required?: true): S;
133+
getSubcommand(required: boolean): S | null;
130134
getFocused(getFull: true): AutocompleteFocusedMapper<ExtractAutocompleteOption<T>>;
131135
getFocused(getFull?: boolean): string;
132136
}

0 commit comments

Comments
 (0)