dev*_*leo 7 typescript discord discord.js
node:v16.11.0
"discord.js": "^13.2.0"
我正在设置一个示例 Discord.js 机器人。
在本指南中,我要添加这一行:
client.commands = new Collection();
Typescript 然后抱怨:Property 'commands' does not exist on type 'Client<boolean>'
这个答案似乎和我想要的一脉相承。但是我仍然遇到一些问题。如果我添加 adeclare module "discord.js"并声明新类型,它似乎不会扩展现有类型,而是会覆盖它。当我这样做时,它不知道Collection我的自定义类型文件中的 a 是什么,因为这是新的 Discord.js 库的自定义内容。我不禁觉得官方指南不应该要求这样做。
我想知道是否有其他人制作了 typescript Discord 机器人并找到了解决此问题的更新解决方案。
感谢您的时间。
dev*_*leo 14
-编辑-
因此,我有机会在搜索中找到自己的问题,并发现我最初回答了错误的问题。事实证明,我们在遵循 Discord.js 指南时收到此错误的原因是因为commandsClient 类上根本没有属性。这只是指南使用的一种模式,Typescript 指出了它。
一旦我为我的项目正确设置了 Typescript,添加该命令就代表Collection<any, any>工作正常。
src/@types/discord.d.ts
import { Collection } from "discord.js";
declare module "discord.js" {
export interface Client {
commands: Collection<any, any>;
}
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"compilerOptions": {
"typeRoots": ["src/@types", "node_modules/@types"],
"outDir": "dist"
},
"include": ["src"],
"exclude": ["node_modules"],
"extends": "@tsconfig/node18/tsconfig.json"
}
Run Code Online (Sandbox Code Playgroud)
-旧答案-
好的。所以我想通了。
创造types/common/discord.d.ts
不要做我所做的事情,只需包括以下内容:
declare module "discord.js" {
export interface Client {
commands: Collection<unknown, any>
}
}
Run Code Online (Sandbox Code Playgroud)
确保它位于顶部。
import { Collection } from "discord.js";
Run Code Online (Sandbox Code Playgroud)
然后它实际上会扩展现有的定义并引入Collection定义而不是替换它。
"@typescript-eslint/no-explicit-any": "off"由于Collection扩展Map和获取任何值,该解决方案还需要添加到 es-lint 中。
| 归档时间: |
|
| 查看次数: |
7594 次 |
| 最近记录: |