gpt4 book ai didi

事件的 typescript 字符串文字方法重载

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:15 24 4
gpt4 key购买 nike

我一直在使用的一些类型定义已经用字符串文字声明了一些方法重载。所以在环境 d.ts 文件中,我看到了:

on(event: string, listener: Function): this;
on(event: 'endTag', listener: (name: string, location?: LocationInfo) => void): this;

这会在 VSCode 中产生很好的智能,它会列出每个事件以及您需要为每个事件使用的不同函数覆盖。

不幸的是,在普通的 TypeScript 中,您不能像上面那样使用字符串文字。您可以将字符串定义为一种类型...

export type Open = "open";
export type Close = "close";
export type Error = "error";

...但是您不能声明仅因这些字符串类型不同而不同的方法重载。也就是说,您目前不允许这样做:

on(event:Open, cb:()=>void){}
on(event:Close, cb:()=>void){}
on(event:Error, cb:(e:string)=>void){}

有没有一种方法可以定义一个方法,使它能够显示不同的事件名称和与这些事件对应的参数重载的智能感知?

最佳答案

正确的实现方式是使用方法签名重载;你只能有一个方法实现:

export class Client {
on(event: "open", cb: () => void)
on(event: "close", cb: () => void)
on(event: "error", cb: (err: Error) => void)
on(event: string, cb: Function) {
switch (event) {
/*add handlers*/
}
}
}

关于事件的 typescript 字符串文字方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com