关于TypeScript动态类型查找特性及具名元组语法名称的咨询
关于TypeScript动态类型查找特性及具名元组语法名称的咨询
嘿,我来帮你拆解这两个TypeScript的特性,刚好我对这块挺熟悉的:
1. 动态类型查找的特性:索引类型查询 + 索引访问类型
你看到的这段代码:
public on<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>): this;
用到的是TypeScript里的索引类型查询和索引访问类型的组合:
keyof ClientEvents是索引类型查询,它会生成一个包含ClientEvents接口所有属性名的联合类型,比如"applicationCommandPermissionsUpdate" | "autoModerationActionExecution"这类事件名的集合;K extends keyof ClientEvents是类型约束,确保传入的event参数只能是ClientEvents里定义的合法事件名;ClientEvents[K]是索引访问类型,它会动态获取ClientEvents中对应K这个事件名的属性类型——也就是该事件触发时回调函数接收的参数类型,这样就能完美实现事件名和回调参数类型的绑定啦。
2. 带名称的元组:具名元组(Named Tuples)
你疑惑的autoModerationRuleCreate: [autoModerationRule: AutoModerationRule];这部分,是TypeScript 3.0引入的**具名元组(Named Tuples)**特性。
它的作用就是给元组中的每个元素添加一个可读性更强的名称,相比普通元组[AutoModerationRule],具名元组能让开发者一眼就知道这个元组元素代表什么(比如这里的autoModerationRule就是创建的自动审核规则实例),在编辑器hover查看类型、写代码补全的时候都会显示这个名称,极大提升了代码的可维护性。
需要注意的是,这个名称只是类型层面的提示,编译成JavaScript后会被完全移除,不会对运行时产生任何影响。
备注:内容来源于stack exchange,提问作者Adam A
相关产品推荐
相关产品推荐

