如何用TypeScript Parameters工具指定AudioNode.connect的第一个重载参数类型?
解决TypeScript中获取AudioNode.connect第一个重载参数类型的问题
仅靠Parameters工具本身做不到,因为TypeScript对重载函数使用Parameters时,默认只会提取最后一个重载签名的参数类型。要获取第一个重载的参数,得先提取出目标重载签名,再搭配Parameters使用。
具体实现步骤
- 定义一个类型工具,用来提取重载函数的第一个签名:
type PickFirstOverload<T> = T extends { (...args: infer Args): infer Return; (...args: any[]): any; } ? (...args: Args) => Return : never;
- 提取
AudioNode["connect"]的第一个重载,再用Parameters获取参数类型:
// 获取第一个重载的参数类型 type FirstConnectParams = Parameters<PickFirstOverload<AudioNode["connect"]>>; // 应用到你的方法中 _outputConnect(params: FirstConnectParams) { return this._outputNode.connect(...params); }
此时FirstConnectParams对应的类型就是第一个重载的参数:[destinationNode: AudioNode, output?: number, input?: number],完全符合你的需求。
原理说明
通过条件类型匹配重载函数的第一个签名,将其从重载列表中单独提取出来,得到一个单一的函数类型后,再用Parameters工具去解析它的参数类型,就能精准拿到目标重载的参数定义。
内容的提问来源于stack exchange,提问作者홍우지
相关产品推荐
相关产品推荐

