因此,我很确定此代码在某一时刻可以正常工作,但是最近我注意到它有时起作用,但并非总是如此(阅读:它将始终清除n个消息,但可能不会清除其他成员) 。
因为我在教自己如何在该项目上使用多个文件,所以代码实际上是在两个文件之间划分的。我不确定这是否与问题有关。给定这两个文件的大小,我已将它们都上传到pastebin。
当我尝试清除n(其中n是可接受范围内的任何数字)时,它的清除效果很好,但是当我尝试通过用户名清除n时,我收到一条错误消息,指出
DiscordAPIError:无效的表单主体
限制:值“”不是int。
(注意这是两个双引号,格式有点不清楚)
我很困惑它在哪里获得不是int的值,因为我正在通过praseInt运行金额。我已经摘录了检查用户是否已定义的代码段,并将其发布在下面,因为我认为这是问题所在:
if (user) { // If User is Provided
debug.run(`Filtering messages by ${user.username}`);
const filterBy = user ? user.id : client.user.id;
messages = messages.filter(m => m.author.id === filterBy).array().slice(0, amount);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。如果我不知道,我或多或少将放弃该用户功能。
我也为格式化道歉。我永远无法掌握这种网站格式。
更新:我现在意识到我忽略了运行时如何处理字符串,因此 100 + 5 实际上不会像我预期的那样工作。我将保留此问题,看看是否有人对我的问题有更好的解决方案,而不是类型转换或类型定义。
我一直在寻找,所以如果这是一个重复的问题,我深表歉意,但是我想知道是否可以为数字字符串定义一个 TypeScript 类型,它接受一个字符串或一个值,然后指示它始终是一个数字?我将数据发送到许多不同的系统,不幸的是,我无法控制模型定义(它们由拥有数据的各个团队控制)。这让我不得不将所有字符串转换为数字来进行计算,然后返回字符串以使 IDE 满意,并导致大量额外工作。
如果我能做如下的事情,我会很高兴,这将有助于减少多余的工作量:
type NumericalString<T extends number | string> = T extends (string | number) ? number : never;
let someVal: NumericalString = "100"; // Recognized as 100 by IDE
// ... elsewhere in code
if (isNumericalString(someVal)) {
someVal+= 5; // No need to cast to number because IDE already knows it's a number
}
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以让 TypeScript 变得智能并知道“100”是有效的数字字符串,但“Foobar”不是,我会特别喜欢它,但我愿意满足于能够欺骗 IDE认为所有字符串在分配为 NumericStrings 时都是数字,并处理其后果,因为我是唯一一个积极从事该项目的人。
我很感谢对此的任何帮助,我觉得我为此损失了一个小时/半天的时间,如果可以的话,我很想提高我的生产力。