2

我正在尝试为没有构造函数的类型为 Google Closure Compiler 制作 externs。

我尝试了以下方法,但它给了我一个Bad type annotation. Unknown type WindowsMediaActiveX.Cdrom错误,因为没有任何东西告诉编译器这WindowsMediaActiveX.Cdrom是一种类型,而不仅仅是方法/属性的集合。

/**
 * @fileoverview Declares externs for the Windows media player ActiveX control.
 * @author Joshua Dwire
 * @suppress {duplicate}
 */

var WindowsMediaActiveX={};


/**
 * Methods and properties for accessing a CD or DVD in its drive.
 */
WindowsMediaActiveX.Cdrom={};


/**
 * Retrieves the CD or DVD drive letter.
 * @type {string}
 * @readonly
 */
WindowsMediaActiveX.Cdrom.prototype.driveSpecifier;



/**
 * Methods and properties for accessing a collection of CD or DVD drives.
 */
WindowsMediaActiveX.CdromCollection={};


/**
 * Retrieves the Cdrom object associated with a particular drive letter.
 * @param {string} driveSpecifier String containing the drive letter followed by a colon (":") character.
 * @returns {WindowsMediaActiveX.Cdrom}
 */
WindowsMediaActiveX.CdromCollection.prototype.getByDriveSpecifier=function(driveSpecifier){};

我知道我可以改变:

/**
 * Methods and properties for accessing a CD or DVD in its drive.
 */
WindowsMediaActiveX.Cdrom={};

到:

/**
 * Methods and properties for accessing a CD or DVD in its drive.
 * @constructor
 */
WindowsMediaActiveX.Cdrom=function(){};

但是如果我或其他人尝试使用new WindowsMediaActiveX.Cdrom(). 关于如何定义这个的任何想法?

对于那些想要了解更多信息的人,我正在开发一个媒体播放器,它将使用 Windows Media ActiveX 控件来播放媒体。我也在使用 Google Closure 编译器和库。我需要为播放器定义 externs 才能正常工作,但 ActiveX 控件使用的所有类型都没有构造函数。它们都是通过其他方法或通过在 html 中创建对象来创建的。我应该如何在 extern 文件中定义它?谢谢你的帮助。

4

1 回答 1

1

此模式的典型注释是:

/** @const */
var WindowsMediaActiveX = {};

/**
 * Methods and properties for accessing a CD or DVD in its drive.
 * @constructor
 * @private
 */
WindowsMediaActiveX.Cdrom=function(){};

注释表明@private构造函数不应该被直接调用。但是,当启用了 accessControls 警告组(带有 VERBOSE 警告)时,编译器只会报告该类型的直接实例化的警告。

编辑:更新答案以将所需的@const注释添加到命名空间。否则访问控制注释将被忽略。

于 2012-11-02T13:49:17.790 回答