我刚刚查看了discord.js的源代码(或者更确切地说是类型头),我发现它在这个函数中从一个接口中查找可能的键类型组合:
public on<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>): this;
界面如下所示:
export interface ClientEvents {
applicationCommandPermissionsUpdate: [data: ApplicationCommandPermissionsUpdateData];
autoModerationActionExecution: [autoModerationActionExecution: AutoModerationActionExecution];
autoModerationRuleCreate: [autoModerationRule: AutoModerationRule];
autoModerationRuleDelete: [autoModerationRule: AutoModerationRule];
// ...
因此,基本上它使用K
类型在ClientEvents
中查找具有适当名称的字段的类型(如果我理解正确的话)。
目前尚不清楚的是如何解释
autoModerationRuleCreate: [autoModerationRule: AutoModerationRule];
部分。更具体地说,元组(???)[autoModerationRule: AutoModerationRule]
。
这个功能怎么叫?我看了 typescript 的参考资料,但没有找到这个。
1条答案
按热度按时间mzsu5hc01#
这称为带标签的元组
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#labeled-tuple-elements
这在处理函数参数时特别有用。
如果你获取了一个函数的参数(这些参数由元组类型表示)并希望保留名称:
这里
P
的类型是[b: number, c:string]
,我们可以使用这个元组创建另一个函数,保留参数名:...现在,如果我们悬停
d
,我们将看到它具有匹配a
的命名参数。以前,没有标记元组(即<TS v3.something),这些参数名称将丢失。Playground链接