getChannel does not exist for interaction.options

Howdy, I'm trying to get a text channel from a command channel option, but I'm getting the error that 'getChannel' property doesn't exist even though it appears as a method in the docs and I've seen it in other people's code. I'm using the typescript complete example bot as a base. Npm ls returns discord.js 14.14.1
ts:32:51 - error TS2339: Property 'getChannel' does not exist on type 'Omit<CommandInteractionOptionResolver<CacheType>, "getMessage" | "getFocused" | "getMentionable" | "getRole" | "getAttachment" | ... 6 more ... | "getSubcommand">'.

const channelOption = interaction.options.getChannel('channel', true);
ts:32:51 - error TS2339: Property 'getChannel' does not exist on type 'Omit<CommandInteractionOptionResolver<CacheType>, "getMessage" | "getFocused" | "getMentionable" | "getRole" | "getAttachment" | ... 6 more ... | "getSubcommand">'.

const channelOption = interaction.options.getChannel('channel', true);
https://discord.js.org/docs/packages/discord.js/14.14.1/CommandInteractionOptionResolver:Class
import { ApplyOptions } from '@sapphire/decorators';
import { Command } from '@sapphire/framework';
import { ChannelType, CommandInteraction, PermissionsBitField } from 'discord.js';

@ApplyOptions<Command.Options>({
name: 'set-image-channel',
description: 'Sets a channel where only images are allowed',
requiredUserPermissions: [PermissionsBitField.Flags.ManageGuild],
preconditions: ['GuildOnly']
})
export class UserCommand extends Command {

private configPath = path.join(process.cwd(), 'config.json');
public override registerApplicationCommands(registry: Command.Registry): void {
registry.registerChatInputCommand((builder) =>
builder
.setName('set-image-channel')
.setDescription(this.description)
.addChannelOption(option =>
option.setName('channel')
.setDescription('')
.setRequired(true)
.addChannelTypes(ChannelType.GuildText)
)
);
}

public override async chatInputRun(interaction: CommandInteraction) {
const channelOption = interaction.options.getChannel('channel', true);

...
}
}
import { ApplyOptions } from '@sapphire/decorators';
import { Command } from '@sapphire/framework';
import { ChannelType, CommandInteraction, PermissionsBitField } from 'discord.js';

@ApplyOptions<Command.Options>({
name: 'set-image-channel',
description: 'Sets a channel where only images are allowed',
requiredUserPermissions: [PermissionsBitField.Flags.ManageGuild],
preconditions: ['GuildOnly']
})
export class UserCommand extends Command {

private configPath = path.join(process.cwd(), 'config.json');
public override registerApplicationCommands(registry: Command.Registry): void {
registry.registerChatInputCommand((builder) =>
builder
.setName('set-image-channel')
.setDescription(this.description)
.addChannelOption(option =>
option.setName('channel')
.setDescription('')
.setRequired(true)
.addChannelTypes(ChannelType.GuildText)
)
);
}

public override async chatInputRun(interaction: CommandInteraction) {
const channelOption = interaction.options.getChannel('channel', true);

...
}
}
discord.js
discord.js
discord.js is a powerful Node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend.
Solution:
Type it as a ChatInputCommandInteraction. Your current type is ambiguous as to wether it's chat input or context menu.
Jump to solution
4 Replies
Solution
Favna
Favna4mo ago
Type it as a ChatInputCommandInteraction. Your current type is ambiguous as to wether it's chat input or context menu.
Flash
Flash4mo ago
Thanks! Makes sense now that you told me and the command is working fine. I wonder if there's anyway I could have figured that out from the docs for future reference? For example, the page the ChatlnputCommandlnteraction options doesn't have getChannel, so I'm just trying to figure out how I would read this. I guess just more exposure to the code. Sorry if dumb question but am kinda new to this https://discord.js.org/docs/packages/discord.js/14.14.1/ChatInputCommandInteraction:Class#options
discord.js
discord.js
discord.js is a powerful Node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend.
Favna
Favna4mo ago
not sure tbh. For Sapphire we re-export it as Command.ChatInputsomething and we do document it in the sapphire guide
Flash
Flash4mo ago
Gotcha. Thank you so much. I'll mark this as solved.