如何实现返回带事件参数Promise的TypeScript泛型函数?
改造非泛型waitEvent为泛型函数以支持类型推断
我有一个非泛型函数waitEvent,用于监听拥有once方法的对象(并非仅EventEmitter类):
export function waitEvent(emitter: { once: Function }, event: string): Promise<any[]> { return new Promise((resolve) => { emitter.once(event, (...args: any[]) => { resolve(args); }); }); }
需求
如何将其改造为泛型函数?例如,当TypeScript已知page对象会触发带(title: string)参数的loaded事件时,执行const [title] = await waitEvent(page, 'loaded')能让TypeScript自动推断title为string类型。
实际场景问题
import {chromium} from "playwright"; const browser = await chromium.launch(); const page = await browser.newPage(); page.once('popup', async (page) => { await page.click('h1'); }); const [popup] = await waitEvent(page, 'popup'); await popup.click('h1');
常规once调用中TypeScript能识别page为Page类型,但原waitEvent返回的popup被推断为any,使用@jcalz的方案后又被推断为Worker,导致click调用报错。
内容的提问来源于stack exchange,提问作者eeeeeeeeeeeeeeeeeeeeeeeeeeeeee
相关产品推荐
相关产品推荐

