Discord.js 类型/声明扩展不起作用

Posted

技术标签:

【中文标题】Discord.js 类型/声明扩展不起作用【英文标题】:Discord.js type/declartion extension not working 【发布时间】:2021-04-17 00:02:20 【问题描述】:

我查看了 TypeScript 的文档,以及关于扩展第三方模块的多个指南,但没有一种方法有效。

我想要完成的是将 commands 属性添加到具有 Discord.Collection() 类型的不和谐客户端。

如果我这样做:


// discord.d.ts file
import * as Discord from "discord.js";

declare module "discord.js" 
    export interface Client 
        commands: Collection<unknown, Command>;
    

    export interface Command 
        name: string;
        description: string;
        execute: (message: Message, args: string[]) => any; // Can be `Promise<SomeType>` if using async
    



// some other file

import * as Discord from "discord.js";
import "discord.d.ts";

const client = new Discord.Client();
client.commands = new Discord.Collection(); // ERROR Property 'commands' does not exist on type 'Client'.ts(2339)

我发现的唯一解决方案是将 Discord.Client() 和 Discord.Collection 包装在单独的类中,然后以这种方式访问​​它们,或者将类型声明添加到 discord.js index.d.ts 文件在 node_modules 中(这意味着克隆项目的其他人将无法访问该类型,因为 node_modules 在 gitignore 中)。我是否遗漏了什么,或者这个库不支持我尝试的声明扩展?

谢谢!

【问题讨论】:

【参考方案1】:

实现您想做的最简单常用的方法是创建另一个扩展 Discord.js 的类:

class MySuperClient extends Discord.Client 

     public commands: Discord.Collection<string, Command>;

     constructor()
          super();
          this.commands = new Discord.Collection();
     



const client = new MySuperClient()
client.login('token');
client.on('ready', () => console.log('Ready! Loaded '+client.commands.size+' commands!');

【讨论】:

知道了。谢谢。那么,虽然这可行,但我原来的帖子中的“声明”方法是否有原因不起作用?这是一个爱好项目,我只是想尽可能多地学习。 是的,有一些不正确的事情。我可以在这里解释它们:androz2091.fr/discord。顺便说一句,如果我的回答是正确的,您可以将其设为已解决

以上是关于Discord.js 类型/声明扩展不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的欢迎信息不起作用(discord.js)

discord.js 代码在 heroku 主机上不起作用

Discord.js 机器人命令不起作用。怎么解决?

Discord.js 命令处理对我不起作用

createReactionCollector 在 discord.js 中不起作用

(discord.js) 检查机器人是不是有权限不起作用