我正在研究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>