javascript - 如何在没有构造函数的情况下在 Closure Compiler externs 中拥有类型

标签 javascript google-closure-compiler google-closure

我正在尝试为没有构造函数的类型为 Google Closure 编译器创建外部程序。

我尝试了以下方法,但它给了我一个 错误的类型注释。未知类型 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 编译器和库。我需要定义外部函数才能使播放器正常工作,但 ActiveX 控件使用的类型都没有构造函数。它们都是通过其他方法或者通过在html中创建对象来创建的。我应该如何在 extern 文件中定义它?感谢您的帮助。

最佳答案

此模式的典型注释是:

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

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

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

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

关于javascript - 如何在没有构造函数的情况下在 Closure Compiler externs 中拥有类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187909/

相关文章:

javascript - 根据 Rails 应用程序中选定的选项显示文本

javascript - 使用自定义光标调整鼠标位置

javascript - jQuery 不会在使用 ajax 加载的 div 上执行

javascript - @code 在 Google Closure 中意味着什么?

javascript - Play Framework 2 : JavaScript gets duplicated as a result of minification (google closure compiler)

javascript - 闭包编译器返回 void 和返回 undefined 之间的区别

javascript - Google Closure Library 最好/更稳定的特性是什么

javascript - 在谷歌桌面中动态创建一个元素

javascript - 谷歌关闭 : How to annotate a parameter used as a constructor

javascript - 如何使用 goog.module 动态加载模块