#typescript #discord.js
Вопрос:
Мне нужна помощь в понимании того, как написать это на машинописном языке. Я попробовал это в javascript, и это работает.
(возвращает значение true или false независимо от того, имеет ли пользователь, осуществивший взаимодействие, разрешение администратора)
execute(client, interaction) {
console.log(interaction.member?.permissions.has("ADMINISTRATOR"));
}
Моя попытка в машинописном виде:
execute(client: MyClient, interaction: CommandInteraction) {
console.log(interaction.member?.permissions.has("ADMINISTRATOR"));
},
В машинописном тексте есть ошибка. есть:
Property 'has' does not exist on type 'string | Readonly<Permissions>'.
Property 'has' does not exist on type 'string'.
Как я могу это исправить?
Ответ №1:
Попробуйте кастинг interaction.member
в качестве GuildMember
// Namespace
import { GuildMember } from "discord.js";
execute(client: MyClient, interaction: CommandInteraction) {
const member = interaction.member as GuildMember;
console.log(member.permissions.has("ADMINISTRATOR"));
},
Ответ №2:
Это происходит из-за CommandInteraction.member
бытия ?GuildMember | ?APIGuildMember
. Если вы перейдете по ссылке APIGuildMember, вы увидите, что права доступа-это строка типа. Я не очень знаком с TS, но я думаю, что это решение
execute(client: MyClient, interaction: CommandInteraction) {
const member = interaction.member as GuildMember
console.log(member?.permissions.has("ADMINISTRATOR"));
}
Комментарии:
1. Я даже не знаю, правильный ли у меня синтаксис. Пожалуйста, исправьте это, если что-то не так.
2. Большое спасибо за ваш ответ! Он распознает .имеет сейчас! Но interaction.member также может быть нулевым, и теперь он выдает мне ошибку, что типы не совпадают, даже если есть»?».
Type 'GuildMember | APIInteractionGuildMember | null' is not assignable to type 'GuildMember'. Type 'null' is not assignable to type 'GuildMember'.
3. Я также очень плохо знаком с машинописным текстом… Отсюда и имя пользователя
4. Ошибка возникает из
const member: GuildMember
-за того, что указано, чтоmember
может иметь только форму члена гильдии, однакоinteraction.member
имеет 3 возможных типа и не может быть ограничено типом члена гильдии5. Ваш ответ был моей идеей, я просто не знал, как это сделать в машинописном виде