如何为返回新类对象的函数指定类型

发布于 2024-12-05 05:13:20 字数 513 浏览 0 评论 0原文

我正在使用谷歌闭包编译器来检查我的 javascript 代码。我有一个函数,它创建然后返回一个新的“类”。也就是说,一个函数返回一个可以应用 new 的对象,并返回该类的“实例”对象。例如,

var newclass = createFactory('Car');
var acar = new newclass();
acar.show();     // executes newclass.prototype.show()
newclass.staticmethod();   // executes newclass.staticmethod()

show 和 staticmethods 是由 createFactory 方法创建的。

我在向 google 闭包编译器定义 newclass 的类型时遇到问题,以便它将 newclass 识别为具有类方法 staticmethod 和实例方法 show 的构造函数。

任何和所有的帮助将不胜感激。

I am using google closure compiler to typecheck my javascript code. I have a function which creates and then returns a new "class." That is, a function which returns an object which can have new applied to it and returns an "instance" object of that class. E.g.,

var newclass = createFactory('Car');
var acar = new newclass();
acar.show();     // executes newclass.prototype.show()
newclass.staticmethod();   // executes newclass.staticmethod()

The show and staticmethods were created by the createFactory method.

I am having trouble defining the type of newclass to the google closure compiler so that it recognizes newclass as a constructor which has a class method staticmethod and an instance method show.

Any and all help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戈亓 2024-12-12 05:13:20

假设生成的工厂有一些公共基类或接口(我将使用 KnownType)。这应该可以解决问题:

/** @type {function(new:KnownType)} */
var newClass = createFactory();

这表示“newClass”是一个使用“new”调用的函数,它返回一个 KnownType 的实例,在这种情况下,它被声明为不带任何参数,但你可以。

CreateFactory 可以将此类型声明为其返回类型,或者您通常使用类型的任何地方。

Assuming the generated factory has some common base class or interface (I'll use KnownType). This should do the trick:

/** @type {function(new:KnownType)} */
var newClass = createFactory();

This says that "newClass" is a function to be called using "new" that returns a instance of KnownType, in this case it is declared as not taking any parameters, but you can.

CreateFactory can declare this type as its return type, or anywhere you would normally use a type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文