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

时间:2016-06-02 13:37:54

标签: typescript

我一直在使用的一些类型定义声明了一些带字符串文字的方法重载。所以在环境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){}

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

1 个答案:

答案 0 :(得分:1)

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

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*/
    }
  }
}