You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现返回带事件参数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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:56:03