类的打字稿绑定,其方法用不同的签名遮蔽父级方法

时间:2019-07-11 15:07:56

标签: typescript generics overloading

我正在研究ts-for-gjs。它为gjs生成打字稿定义,使您可以在JS运行时(基于Spidermonkey)中使用gobject-introspection库,例如Gtk和GStreamer。

许多自省的类都将伪构造器作为静态方法,这导致它们中的一些具有一个或多个静态方法,这些方法的名称与其父类中的方法相同,但签名不同。

尝试解决此问题的方法,我发现,如果我想要此API:

export class Parent {
    ...
    static new(arg1: string): Parent
}

export class Child extends Parent {
    ...
    static new(arg1: number, arg2: number): Child
}

我要做的就是将其添加到Parent

static new<T, V>(arg1: T): V

如果Parent.new接受的参数多于Child.new,而不是此处显示的相反方式,这也适用。

令我感到困惑的是,当通用形式只有一个参数,而重载之一却需要两个参数时,为什么这种方法能起作用?我原本希望写这样的东西:

static new<T, V>(arg1: T, arg2?: number): V

,但是编译器接受不带arg2的参数,并且编译后的代码按预期和预期运行。我并不是在抱怨它,但是即使它对我有利,我也想理解它。 这基本上是我的问题,为什么不需要arg2

对于任何对通用返回类型V感到好奇的人,我发现有一个很好的理由使用它而不是this comment后面解释的Child | Parent。 / p>

0 个答案:

没有答案