Hal*_*ouf 2 javascript node.js typescript discord discord.js
我是 Typescript 的新手,正在使用 Typescript 编写一个 Discord 机器人。我想向 Client 对象添加一个变量“命令”。例如在 Javascript 中,你使用这个:
Javascript
const { Client } = require('discord.js');
const client = new Client();
client.commands = 'commands';
console.log(client.commands);
// 'commands'
Run Code Online (Sandbox Code Playgroud)
但现在我想添加一些类似于 Typescript 的东西。但是当我在 Typescript 中使用它时,出现以下错误:
Property 'commands' does not exist on type 'Client'.ts(2339)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我目前的代码:
Property 'commands' does not exist on type 'Client'.ts(2339)
Run Code Online (Sandbox Code Playgroud)
使用打字稿并遵循https://discordjs.guide的指南时,我遇到了同样的问题
默认情况下,commands不是Discord.Client对象的现有属性类型,但您可以通过创建.d.ts文件轻松地使用您自己的类型扩展 Discord.js 类型。
discord.d.ts我的项目目录中有文件,它包含:
declare module "discord.js" {
export interface Client {
commands: Collection<unknown, any>
}
}
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题。
如果您使用discord.js 指南中的单文件样式命令,甚至更好:
import { Message } 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[]) => SomeType // Can be `Promise<SomeType>` if using async
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您还可以在从 访问命令对象时获得代码完成this.client.commands.get("commandName"),Command如果需要,您还可以从 导入类型import { Command } from "discord.js"。
当我想从我的命令文件中严格键入导出的命令时,我发现这很有用,例如:
import { Command } from "discord.js";
// Now `command` is strictly typed to `Command` interface
const command: Command = {
name: "someCommand",
description: "Some Command",
execute(message, args): SomeType /* Can be Promise<SomeType> if using async */ {
// do something
}
};
export = command;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |